В некоторых системах 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, он даст мне этот результат ниже, и я знаю, были ли они дублированы, но не почему.
$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 нашими серверами, и мы не можем понять, почему и как вернуть только одно значение.
Нет информации, где $ip
объект исходит из… Если его тип является массивом (или любым списком, например Object[]
), то фрагмент кода не противоречит ни Get-WmiObject
синтаксис командлета (-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