Powershell
如何使用 Powershell 啟用卷影複製?
如何在特定驅動器(D:、E:、…)上啟用卷影複製並使用 Powershell 設置計劃?
我只需要一些提示如何開始。
您可以使用 WMI 對像在特定驅動器上創建卷影副本,如Microsoft 文章中所述。
在特定驅動器(D:、E:、…)上啟用卷影複製是兩件事
- 如上一篇文章所示創建卷影副本
- 創建計劃任務以創建卷影副本
我花了一點時間才使它起作用(在找到導致它失敗的簡單錯誤之後),並且該功能不完整。我想添加在遠端電腦上啟用它的功能,這可能必須通過執行一次的任務來完成。如果有人修改了這個並添加了那個,請告訴我!
function Enable-ShadowCopies { param( [String]$ComputerName = $Env:ComputerName, [Parameter(Mandatory=$true)] [String]$Drive ) $volumeWMI = Get-WmiObject -ComputerName $ComputerName -Class Win32_Volume -Filter "DriveLetter = '$Drive'"; $volumeID = ($volumeWMI.DeviceID.SubString(10)).SubString(0,($volumeWMI.DeviceID.SubString(10)).Length-1); $scheduler = New-Object -ComObject Schedule.Service $scheduler.Connect($ComputerName) $tskDef = $scheduler.NewTask(0); $tskRegInfo = $tskDef.RegistrationInfo; $tskSettings = $tskDef.Settings; $tskTriggers = $tskDef.Triggers; $tskActions = $tskDef.Actions; $tskPrincipals = $tskDef.Principal; # Registration Info $tskRegInfo.Author = "PowerShell Script"; # Settings $tskSettings.DisallowStartIfOnBatteries = $false; $tskSettings.StopIfGoingOnBatteries = $false $tskSettings.AllowHardTerminate = $false; $tskSettings.IdleSettings.IdleDuration = "PT600S"; $tskSettings.IdleSettings.WaitTimeout = "PT3600S"; $tskSettings.IdleSettings.StopOnIdleEnd = $false; $tskSettings.IdleSettings.RestartOnIdle = $false; $tskSettings.Enabled = $true; $tskSettings.Hidden = $false; $tskSettings.RunOnlyIfIdle = $false; $tskSettings.WakeToRun = $false; $tskSettings.ExecutionTimeLimit = "PT259200S"; $tskSettings.Priority = "5"; $tskSettings.StartWhenAvailable = $false; $tskSettings.RunOnlyIfNetworkAvailable = $false; # Triggers $tskTrigger1 = $tskTriggers.Create(3); $tskTrigger2 = $tskTriggers.Create(3); ## Trigger 1 $tskTrigger1.Id = "Trigger1" $tskTrigger1.StartBoundary = (Get-Date -format "yyyy-MM-dd")+"T07:00:00"; $tskTrigger1.DaysOfWeek = 0x3E; # Monday - Friday - http://msdn.microsoft.com/en-us/library/windows/desktop/aa384024(v=vs.85).aspx $tskTrigger1.Enabled = $true; ## Trigger 2 $tskTrigger2.Id = "Trigger2"; $tskTrigger2.StartBoundary = (Get-Date -format "yyyy-MM-dd")+"T12:00:00"; $tskTrigger2.DaysOfWeek = 0x3E; # Monday - Friday - http://msdn.microsoft.com/en-us/library/windows/desktop/aa384024(v=vs.85).aspx $tskTrigger2.Enabled = $true; # Principals (RunAs User) $tskPrincipals.Id = "Author"; $tskPrincipals.UserID = "SYSTEM"; $tskPrincipals.RunLevel = 1; # Actions $tskActions.Context = "Author" $tskAction1 = $tskActions.Create(0); # Action 1 $tskAction1.Path = "C:\Windows\system32\vssadmin.exe"; $tskAction1.Arguments = "Create Shadow /AutoRetry=15 /For="+$volumeWMI.DeviceID; $tskAction1.WorkingDirectory = "%systemroot%\system32"; # Configure VSS, Add scheduled task vssadmin Add ShadowStorage /For=$Drive /On=$Drive /MaxSize=10%; $tskFolder = $scheduler.GetFolder("\") $tskFolder.RegisterTaskDefinition("ShadowCopyVolume$volumeID", $tskDef, 6, "SYSTEM", $null,5); }
即使這可行,並且它模仿了您通過 GUI 執行此操作時發生的情況,但它仍然顯示為該驅動器已禁用。但是如果你啟用它,什麼都不會改變!(大聲笑)我猜在系統資料庫中還需要修改一些東西。