コマンドラインを使用したWindows 8 / 8.1 / 10ファイル履歴の構成


9

tl; dr:無人のコマンドライン/スクリプトを使用してWindows 8のファイル履歴を構成する方法はありますか?

長い話:私は多くのスタンドアロン(非ドメイン)PCを構成していますが、バックアップを行わないよりもバックアップを行うほうが良いと思います。Windows 7では、遅延はあるものの、標準のバックアップを構成します。デフォルトでは、週末までに何らかの理由でユーザーがPCの電源を切らず、バックアップメディアがいっぱいになり、バックアップが停止しない限り、毎週月曜日にコンピューターの速度が大幅に低下します。

そして、私はその構成を自動化するために辞任しましたが、少なくともそこには管理者として一度セットアップすることができ、新しいユーザーを含むすべてのユーザーに効果的です。そして、私はよ、スケジューリング(スケジューリングされた自動化されたカスタムスクリプトのバックアップメディアはスペースが不足しているときに、古いバックアップを削除するには、それは(一度設定して忘れて)、その後のメンテナンスを必要としないのです。

Windows 8以降、File Historyと呼ばれるこのようなものがあります。これはユーザーにとってはあまり邪魔にならず(パフォーマンスへの影響はほとんど目立ちません)、それ自体をクリーンアップできます(年齢または空き領域に基づく自動履歴管理)。これは本当のバックアップソリューションです。今のところは:)しかし、各ユーザーの手動構成も必要です。ユーザー設定忘れるので、これは受け入れられません。

私の計画は、runonceログオンスクリプトを使用してユーザーごとに構成することです。私はすでにrunonce-logonスクリプトを介していくつかのことを行っているので、そのようなスクリプトをインストールしても問題はありません。しかし、スクリプトを介してファイル履歴を構成する方法がわかりません。

私はいくつかの研究を試みましたが、唯一の公式(いくつかの非公式な調査結果があります。スクリーンショットをご覧ください)関連ツールは、古いファイルバージョンを削除するFhManagew.exeです。そして、最初にGUIで設定する必要があります。リンクには完全なAPIがあり、そのAPIを介して一見ファイル履歴を設定できます。ただし、これは.NETアプリ用のAPIであるため、コマンドラインから使用することはできません。それともできますか?

レジストリ検索を試みましたが、ファイル履歴の場所はどこにも見つかりません:(

具体的には、\\localhost\FileHistory$空き領域が必要になるまでファイルの履歴を設定し、ファイルのバージョンを保持するとします(デフォルトでは永久に保持されます)。外観は次のとおりです。

従来のコントロールパネルのファイル履歴 ファイル履歴の詳細設定 ファイル履歴選択ドライブ

参考:ローカル共有へのバックアップは、単一のHDDでファイル履歴を機能させるための回避策です。そうでない場合、安全ではないと主張します。


コメントで見つけたものは次のとおりです。構成はのxmlファイルに保存されます%LocalAppData%\Microsoft\Windows\FileHistory\Configuration。レジストリキーでHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\fhsvc\Parameters\Configs、値name =構成フォルダーへのパス(上記のとおり)、および値data =で参照されますREG_DWORD:1

ただし、これらのファイルとレジストリ値を追加してサービスを開始するだけで(スクリプトがあります)、バックアップは開始されず、コントロールパネルの構成も更新されません。ただし、ファイル履歴が既に構成されている場合、xmlファイルの更新はコントロールパネルに反映されます。


1
このリンクをご覧ください。これはあなたを助けるかもしれません。
Smeerpijp

おかげで、その痕跡が見つかった以下の別のものを。これら2つを使用してセットアップスクリプトを記述しようとしています。
LogicDaemon

まだ成功していません。そして、何が間違っているのか分かりません。最初の質問に調査結果を追加します。
LogicDaemon

1
しかし、FileHistoryをセットアップしたら、Config1.xmlファイルを変更でき、変更がすぐに反映されるように見えることがわかりました。
18年

回答:


5

残念ながら、APIの使用はそれほど単純ではありません。関連する呼び出しのほとんどは、実装していないCOMオブジェクトに対するものIDispatchです。したがって、PowerShellからこれらの関数を呼び出すことは非常に困難で面倒です。これらは私たちが行う必要がある呼び出しです:

これらのすべての関数を呼び出すには、オープンソースアプリケーションのSprintDLLを使用できます。私はあなたのためにこのスクリプトを書き、各セクションに相当するfaux-C ++でコメントしました:

// CoCreateInstance(CLSID_FhConfigMgr, NULL, CLSCTX_INPROC_SERVER, IID_IFhConfigMgr, &fh)
newslot native fhPtr
call ole32.dll!CoCreateInstance /return uint (blockptr(guid {ED43BB3C-09E9-498a-9DF6-2177244C6DB4}), nullptr, int 1, blockptr(guid {6A5FEA5B-BF8F-4EE5-B8C3-44D8A0D7331C}), slotptr fhPtr)
newslot native fh
copyslot fh = fhPtr dereferenced
newslot block vtbl = nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr
copyslot vtbl = fh dereferenced

// fh->CreateDefaultConfiguration(TRUE)
newslot native createDefaultConfiguration
copyslot createDefaultConfiguration = vtbl field 4
call funcat createDefaultConfiguration /call thiscall /return uint (slotdata fhPtr, int 1)

// fh->ProvisionAndSetNewTarget("\\localhost\FileHistory$\", "Local Disk")
newslot native provisionAndSetNewTarget
copyslot provisionAndSetNewTarget = vtbl field 14
call funcat provisionAndSetNewTarget /call thiscall /return uint (slotdata fhPtr, bstr "\\\\localhost\\FileHistory$\\", bstr "Local Disk")

// fh->SetLocalPolicy(FH_RETENTION_TYPE, FH_RETENTION_UNLIMITED)
newslot native setLocalPolicy
copyslot setLocalPolicy = vtbl field 9
call funcat setLocalPolicy /call thiscall /return uint (slotdata fhPtr, int 1, int 1)

// fh->SetBackupStatus(FH_STATUS_ENABLED)
newslot native setBackupStatus
copyslot setBackupStatus = vtbl field 11
call funcat setBackupStatus /call thiscall /return uint (slotdata fhPtr, int 2)

// fh->SaveConfiguration()
newslot native saveConfiguration
copyslot saveConfiguration = vtbl field 5
call funcat saveConfiguration /call thiscall /return uint (slotdata fhPtr)

// FhServiceOpenPipe(TRUE, &fhPipe)
newslot native fhPipe
call fhsvcctl.dll!FhServiceOpenPipe /return int (int 1, slotptr fhPipe)

// FhServiceReloadConfiguration(fhPipe)
call fhsvcctl.dll!FhServiceReloadConfiguration /return int (slotdata fhPipe)

// FhServiceClosePipe(fhPipe)
call fhsvcctl.dll!FhServiceClosePipe /return int (slotdata fhPipe)

File History Manager COMオブジェクトのCスタイルCOMインターフェイスの関数の位置からVTableフィールドIDを取得しました。スクリプトが成功すると、すべての関数がゼロを返したと言います。

スクリプトを使用するには、ファイルなどに保存しますfilehistory.sprint。その後、次のようなバッチファイルから実行できます。

sprintdll run filehistory.sprint

ネットワーク経由で展開する場合、ユーティリティとスクリプトをローカルマシンにコピーするコマンドを最初に含めることができます。


2
OK、だからこれはこの特定の問題のためにMSDNドキュメントの地獄でかなりの時間を節約しただけでなく、SprintDLLを愛しています!ドキュメントの欠如は少々残念ですが、コード自体は十分に単純で、ある種の二重の義務があります。そこにそれを出すためにあなたに良い、そしてあなたはすぐに私からPRまたは2を見るかもしれません:)
リード・ランキン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.