在一些系统上,我让 GetDwordValue 返回重复值 (.uvalue),命令如下
$reg=Get-WmiObject -List -Namespace root\default -ComputerName $ip.ipaddress | Where-Object {$_.Name -eq "StdRegProv"}
$reg.GetDwordValue($HKLM,"System\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Server","enabled").uvalue
它返回值
1
1
如果我在没有 .uvalue 的情况下运行它,它会给我下面的输出,我知道它得到了 11 个重复项,但不知道为什么。
$reg.GetDwordValue($HKLM,"System\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Server","enabled")
__GENUS : 2
__CLASS : __PARAMETERS
__SUPERCLASS :
__DYNASTY : __PARAMETERS
__RELPATH :
__PROPERTY_COUNT : 2
__DERIVATION : {}
__SERVER :
__NAMESPACE :
__PATH :
ReturnValue : 0
uValue : 1
PSComputerName :
__GENUS : 2
__CLASS : __PARAMETERS
__SUPERCLASS :
__DYNASTY : __PARAMETERS
__RELPATH :
__PROPERTY_COUNT : 2
__DERIVATION : {}
__SERVER :
__NAMESPACE :
__PATH :
ReturnValue : 0
uValue : 1
PSComputerName :
我们的大约 3 台服务器都出现过这种情况,无法弄清楚为什么或如何只返回一个值。
答案1
没有关于$ip
对象来自哪里的信息...如果它的类型是一个数组(或者任何类型的列表,例如Object[]
),那么代码片段既不与Get-WmiObject
cmdlet 语法(-ComputerName <String[]>
)相矛盾,也不与类GetDWORDValue
的方法相矛盾StdRegProv
。
证明:
$HKLM = 2147483650
$ip = @( @{ ipaddress = $env:COMPUTERNAME },
@{ ipaddress = $env:COMPUTERNAME } )
$ip.ipaddress.GetType().Name # Object[]
$reg=Get-WmiObject -List -Namespace root\default -ComputerName $ip.ipaddress | Where-Object {$_.Name -eq "StdRegProv"}
$reg.GetDwordValue( $HKLM,"System\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Server","enabled").uvalue
输出:
D:\PShell\SF\969516.ps1
Object[] 0 0