tl; dr:無人のコマンドライン/スクリプトを使用してWindows 8のファイル履歴を設定する方法はありますか?
長い話:多くのスタンドアロン(非ドメイン)PCを構成していますが、バックアップがない方がバックアップよりも優れていると思います。 Windows 7では、標準的なバックアップを構成しましたが、遅延が発生しましたが、デフォルトでは毎週月曜日にコンピューターの速度が大幅に低下しています。
そして、私はその構成を自動化することを試みるために辞任しましたが、少なくともそこでは管理者として一度設定することができ、それは新しいユーザーを含むすべての人に効果的です。そして、私は scheduling (scheduling is automated ) custom script バックアップメディアの空き容量が少ないときに古いバックアップを削除するので、必要ありませんその後のメンテナンス(一度設定すれば忘れます)。
Windows 8以降、ファイル履歴と呼ばれるものがあります。これはユーザーにとってそれほど煩わしくなく(パフォーマンスへの影響はほとんど目立ちません)、自動的にクリーンアップできます(経過時間または空き領域に基づく自動履歴管理)。今のところ、これは実際のバックアップソリューションです:)しかし、ユーザーごとに手動で構成する必要もあります。ユーザーが設定を忘れるため、これは許容されません。
私の計画は、いくつかのrunonceログオンスクリプトを使用してユーザーごとに構成することです。私はすでにrunonce-logonスクリプトを介していくつかのことを行っているので、そのようなスクリプトのインストールは問題ではありません。しかし、スクリプトを使用してファイル履歴を構成する方法がわかりません。
私はいくつかの研究を試みましたが、唯一の公式(いくつかの非公式の調査結果があります、以下のスクリーンショットを参照してください)私が見つけた関連ツールは FhManagew.exe で、これは削除されます古いファイルバージョン。最初にGUIで設定する必要があります。リンクには完全なAPIがあり、そのAPIを介してファイル履歴を構成できます。しかし、これは.NETアプリ用のAPIであるため、コマンドラインからは使用できません。それともできますか?
レジストリ検索を試みましたが、ファイル履歴の場所がどこにも見つかりません:(
具体的には、ファイル履歴を\\localhost\FileHistory$
に設定し、空き容量が必要になるまでファイルのバージョンを保持したいとします(デフォルトでは、永久に保持されます)。以下はその外観です。
参考までに:ローカル共有へのバックアップは、ファイル履歴を単一のHDDで機能させるための回避策です。それ以外の場合は、安全ではないと主張します。
これは私がコメントで見つけたものです:設定は%LocalAppData%\Microsoft\Windows\FileHistory\Configuration
のxmlファイルに保存されています。レジストリキーHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\fhsvc\Parameters\Configs
で参照されます。値の名前=構成フォルダーへのパス(上記のとおり)、値のデータ= REG_DWORD:1
。
ただし、これらのファイルとレジストリ値を追加してサービス( そのためのスクリプトがあります )を開始するだけではバックアップは開始されず、構成もコントロールパネルで更新されません。ただし、ファイル履歴がすでに構成されている場合、xmlファイルへの更新はコントロールパネルに反映されます。
残念ながら、APIの使用は簡単ではありません。関連する呼び出しのほとんどは COMオブジェクト へのものであり、IDispatch
を実装していません。したがって、PowerShellからこれらの関数を呼び出すのは非常に困難で面倒です。これらは私達がする必要がある呼び出しです:
CoCreateInstance
はFhConfigMgr
オブジェクトを取得しますIFhConfigMgr::CreateDefaultConfiguration
構成を作成するか、古い構成を置き換えるIFhConfigMgr::ProvisionAndSetNewTarget
バックアップ先フォルダを設定しますIFhConfigMgr::SetLocalPolicy
スペースが必要な場合にのみ削除するようにポリシーを設定するにはIFhConfigMgr::SetBackupStatus
ファイル履歴をオンにするIFhConfigMgr::SaveConfiguration
変更をコミットしますFhServiceOpenPipe
ファイル履歴サービスへのハンドルを取得するFhServiceReloadConfiguration
サービスに設定をリロードするように指示しますFhServiceClosePipe
サービスへのハンドルを閉じるこれらすべての関数を呼び出すには、オープンソースアプリケーション 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)
ファイル履歴マネージャーのCOMオブジェクトの CスタイルのCOMインターフェイス の関数の位置からVTableフィールドIDを取得しました。スクリプトが成功すると、すべての関数がゼロを返したと表示されます。
スクリプトを使用するには、スクリプトをファイルに保存します。 filehistory.sprint
。その後、次のようなバッチファイルから実行できます。
sprintdll run filehistory.sprint
ネットワーク経由で展開する場合は、最初にユーティリティとスクリプトをローカルマシンにコピーするコマンドを含めることができます。