none
Проблема с WMI RRS feed

  • Вопрос

  • Добрый день, у меня возникла проблема с работой 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]$erroracces
    • Изменено Сергей29 29 апреля 2013 г. 20:27
    • Помечено в качестве ответа Сергей29 29 апреля 2013 г. 20:28
    29 апреля 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]$erroracces
    • Изменено Сергей29 29 апреля 2013 г. 20:27
    • Помечено в качестве ответа Сергей29 29 апреля 2013 г. 20:28
    29 апреля 2013 г. 19:44