使用 Powershell 暂停 Bitlocker - 出现错误
Using Powershell to Suspend Bitlocker - Getting error
我正在部署一个包来暂停 bitlocker,然后在我们的许多 HP 系统上应用 BIOS 更新。该脚本在大约 90-95% 的系统上运行没有问题,但大约有 5-10% 的系统出现故障。
这是我正在使用的脚本:
#Create Variable of Bitlocker Status
$Volume = Get-WmiObject -Namespace root\cimv2\security\microsoftvolumeencryption -Query "select * from win32_encryptablevolume where DriveLetter = 'C:'"
$Status = $Volume.GetProtectionStatus()
$BitLockerStatus = $status.ProtectionStatus
#Check if Bilocker enabled, then suspend.
If ($BitlockerStatus -eq '1'){$Volume.DisableKeyProtectors()}
$Status = $Volume.GetProtectionStatus()
$BitLockerStatus = $status.ProtectionStatus
If($BitLockerStatus -eq '1'){
mofcomp.exe c:\windows\system32\wbem\win32_encryptablevolume.mof
Manage-bde.exe -protectors -disable c:
}
#Update Variable of Bitlocker Status
$BitLockerStatus = $status.ProtectionStatus
这是错误:
Message : You cannot call a method on a null-valued expression.
InnerException :
FullyQualifiedErrorId : InvokeMethodOnNull
ScriptStackTrace : at <ScriptBlock>,
C:\Windows\ccmcache\Deploy-Application.ps1: line 129
at <ScriptBlock>, <No file>: line 1
at <ScriptBlock>, <No file>: line 1
``PositionMessage : At C:\Windows\ccmcache\Deploy-Application.ps1:129 char:9
+ $Status = $Volume.GetProtectionStatus()
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
我明白了错误的含义,但我感到困惑的是为什么只有少数系统出现故障。
简单地测试 $Volume
是否不是 $null
(无论如何这是最佳实践)。由于各种原因,WMI 查询将 return $null
,例如从 Windows 的不兼容版本,到没有有效的 C: 可加密卷,等等,因此导致你的错误。
#Create Variable of Bitlocker Status
$Volume = Get-WmiObject -Namespace root\cimv2\security\microsoftvolumeencryption -Query "select * from win32_encryptablevolume where DriveLetter = 'C:'"
if($Volume)
{
$Status = $Volume.GetProtectionStatus()
$BitLockerStatus = $status.ProtectionStatus
#Check if Bilocker enabled, then suspend.
If ($BitlockerStatus -eq '1'){$Volume.DisableKeyProtectors()}
$Status = $Volume.GetProtectionStatus()
$BitLockerStatus = $status.ProtectionStatus
If($BitLockerStatus -eq '1'){
mofcomp.exe c:\windows\system32\wbem\win32_encryptablevolume.mof
Manage-bde.exe -protectors -disable c:
}
#Update Variable of Bitlocker Status
$BitLockerStatus = $status.ProtectionStatus
}
如果需要,唯一的补充是标记 WMI 查询失败的机器,以便技术人员在 needed/desired 时进一步跟进。
我正在部署一个包来暂停 bitlocker,然后在我们的许多 HP 系统上应用 BIOS 更新。该脚本在大约 90-95% 的系统上运行没有问题,但大约有 5-10% 的系统出现故障。
这是我正在使用的脚本:
#Create Variable of Bitlocker Status
$Volume = Get-WmiObject -Namespace root\cimv2\security\microsoftvolumeencryption -Query "select * from win32_encryptablevolume where DriveLetter = 'C:'"
$Status = $Volume.GetProtectionStatus()
$BitLockerStatus = $status.ProtectionStatus
#Check if Bilocker enabled, then suspend.
If ($BitlockerStatus -eq '1'){$Volume.DisableKeyProtectors()}
$Status = $Volume.GetProtectionStatus()
$BitLockerStatus = $status.ProtectionStatus
If($BitLockerStatus -eq '1'){
mofcomp.exe c:\windows\system32\wbem\win32_encryptablevolume.mof
Manage-bde.exe -protectors -disable c:
}
#Update Variable of Bitlocker Status
$BitLockerStatus = $status.ProtectionStatus
这是错误:
Message : You cannot call a method on a null-valued expression.
InnerException :
FullyQualifiedErrorId : InvokeMethodOnNull
ScriptStackTrace : at <ScriptBlock>,
C:\Windows\ccmcache\Deploy-Application.ps1: line 129
at <ScriptBlock>, <No file>: line 1
at <ScriptBlock>, <No file>: line 1
``PositionMessage : At C:\Windows\ccmcache\Deploy-Application.ps1:129 char:9
+ $Status = $Volume.GetProtectionStatus()
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
我明白了错误的含义,但我感到困惑的是为什么只有少数系统出现故障。
简单地测试 $Volume
是否不是 $null
(无论如何这是最佳实践)。由于各种原因,WMI 查询将 return $null
,例如从 Windows 的不兼容版本,到没有有效的 C: 可加密卷,等等,因此导致你的错误。
#Create Variable of Bitlocker Status
$Volume = Get-WmiObject -Namespace root\cimv2\security\microsoftvolumeencryption -Query "select * from win32_encryptablevolume where DriveLetter = 'C:'"
if($Volume)
{
$Status = $Volume.GetProtectionStatus()
$BitLockerStatus = $status.ProtectionStatus
#Check if Bilocker enabled, then suspend.
If ($BitlockerStatus -eq '1'){$Volume.DisableKeyProtectors()}
$Status = $Volume.GetProtectionStatus()
$BitLockerStatus = $status.ProtectionStatus
If($BitLockerStatus -eq '1'){
mofcomp.exe c:\windows\system32\wbem\win32_encryptablevolume.mof
Manage-bde.exe -protectors -disable c:
}
#Update Variable of Bitlocker Status
$BitLockerStatus = $status.ProtectionStatus
}
如果需要,唯一的补充是标记 WMI 查询失败的机器,以便技术人员在 needed/desired 时进一步跟进。