Powershell命令Enable ComputerRestore不接受变量



有人能帮我使用这个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 + '')" }

最新更新