有人能帮我使用这个powershell脚本吗?我不能让它工作。
$drives = Get-WmiObject -class win32_logicaldisk |
Where-Object { $_.DriveType -eq 3 }
$drives | ForEach-Object { Enable-ComputerRestore $_.Name }
此外,以下作品如预期!
$drives = Get-WmiObject -class win32_logicaldisk |
Where-Object { $_.DriveType -eq 3 }
$drives | ForEach-Object { Write-Host $_.Name }
提前谢谢。
Enable-ComputerRestore
似乎有两个不寻常的要求:
-
(位置隐含(
-Drive
参数必须以(反斜杠(结尾,例如
C:
-
为了针对系统驱动器之外的驱动器,还必须指定系统驱动器,同时必须为系统驱动器启用非系统驱动器或系统还原。
由于您的代码枚举了所有本地磁盘(.DriveType -eq 3
(,根据定义,系统驱动器就在其中,因此最简单的解决方案是将所有本地驱动器一次传递给Enable-ComputerRestore
,作为阵列:
$driveSpecs =
Get-CimInstance -Class Win32_LogicalDisk |
Where-Object { $_.DriveType -eq 3 } |
ForEach-Object { $_.Name + '' }
Enable-ComputerRestore $driveSpecs
题外话:
我用
Get-CimInstance
替换了Get-WmiObject
,因为CIM cmdlet取代了PowerShell v3(2012年9月发布(中的WMI cmdlet。因此,应该避免WMI cmdlet,尤其是因为PowerShellCore(第6版及更高版本(,未来所有的工作都将进行,甚至都不再有它们。有关更多信息,请参阅此答案。过滤
Get-CimInstance
输出的一种更简洁、更有效的方法是使用-Filter
参数来代替单独的Where-Object
调用:Get-CimInstance -Class Win32_LogicalDisk -Filter 'DriveType = 3'
我自己找到了解决方案。为他人发帖。
$OSDriveLetter = (Get-ComputerInfo | Select-Object -Property "OsSystemDrive").OsSystemDrive
Get-CimInstance -class win32_logicaldisk |
Where-Object { $_.DriveType -eq 3 } |
ForEach-Object { Enable-ComputerRestore "$($_.Name + '')", "$($OSDriveLetter + '')" }