$cred = Get-Credential test\test
$computer = "."
$namespace = "root\DEFAULT"
$HKLM = 2147483650
$oreg = get-wmiobject -list -namespace $namespace -ComputerName $computer -Credential $cred| where-object { $_.name -eq "StdRegProv" }
$strKeyPath = "SOFTWARE\Symantec\SharedDefs"
$strValueName = "DEFWATCH_10"
($oreg.GetStringValue($HKLM,$strKeyPath,$strValueName)).svalue
使用上面代码连接远程计算机,将收到返回 :
检索成员“GetStringValue”时发生异常:“拒绝访问。 (异常来自 HRESULT:0x80070005 (E_ACCESSDENIED))”
所在位置 行:1 字符: 57
+ ($oreg.GetStringValue($HKLM,$strKeyPath,$strValueName)).s <<<< value
而其他一些class均正常;若不使用凭据,在域环境中运行正常;若不使用凭据,工作组中运行正常(当然本机具有同样密码的相应账户);使用凭据,在本机建立同样密码的相应账户,同样正常。
不清楚是powershell对wmi支持不够好,还是某些新的补丁引起 ?目前是怀疑微软某个安全补丁引起,可能会在后续补丁中修复。