Лучший отвечающий
Проблема с WMI

Вопрос
-
Добрый день, у меня возникла проблема с работой WMI объектов, то есть при выполнение вот этого участка кода
[string[]]$computername = @() [string[]]$Arrayerror=@() $computername += "192.168.1.1" $computername += "192.168.1.66" $computername += "192.168.1.9" for ($i=0; $i -lt 3; $i++) { Get-WmiObject -Class Win32_PingStatus -ComputerName $computername[$i] -ErrorVariable erroracces #$erroracces | Get-Member -MemberType all $erroracces | Select-Object {$_.HResult} #Write-Host '111111111' $erroracces.HResult '666666' if ($erroracces.HResult -ne '-2146233087') { $Arrayerror += '1' } elseif ($erroracces.HResult -eq '-2146233087') { $Arrayerror += '2' } } For ($i=0; $i -lt 3; $i++){ if ($Global:Arrayerror[$i] -eq '2'){ Write-Host $computername[$i] 'Терминал работает' } }
всё работает при красно, в $Arrayerror[1] на основе $computername[1] вноситься значение 2.
А вот при выполнении этого в теле функции(вот часть кода)
function WMIAccess ([string]$erroracces,[string[]]$Global:Arrayerror=@()){ for ($i=0; $i -lt 3; $i++) { Get-WmiObject -Class Win32_PingStatus -ComputerName $Global:computername[$i] -ErrorVariable erroracces #$erroracces | Get-Member -MemberType all $erroracces | Select-Object {$_.HResult} #Write-Host '111111111' $erroracces.HResult '666666' if ($erroracces.HResult -ne '-2146233087') { $Global:Arrayerror += '1' } elseif ($erroracces.HResult -eq '-2146233087') { $Global:Arrayerror += '2' } Write-Host $Global:computername[$i], $erroracces.HResult } Write-Host $Arrayerror[0], $Arrayerror[1], $Arrayerror[2] }
все значения Arrayerror[$i] всегда равны 1, с чем это может быть связано
29 апреля 2013 г. 17:46
Ответы
-
Команда есть, но она же не проверяет полную загрузку Windows, а мне нужно проверить работу и в режиме Wake on LAN и с полным запуском ПК службой (WMI)
Спасибо разобрался, не правильно указал тип данных, вместо [System.Collections.ArrayList]$erroracces поставил [string]$erroracces29 апреля 2013 г. 19:44
Все ответы
-
Есть же командлет Test-Connection,зачем придумывать такие вещи:
$computername = "192.168.1.1","192.168.1.66","192.168.1.9" $ComputerName | Foreach { if(Test-Connection $_ -Quiet -Count 3) { Write-Host "$_ работает" -Fore Yellow } else { Write-Host "$_ не работает" -Fore Red } }
29 апреля 2013 г. 18:13Отвечающий -
Команда есть, но она же не проверяет полную загрузку Windows, а мне нужно проверить работу и в режиме Wake on LAN и с полным запуском ПК службой (WMI)
Спасибо разобрался, не правильно указал тип данных, вместо [System.Collections.ArrayList]$erroracces поставил [string]$erroracces29 апреля 2013 г. 19:44