2012-12-06 5 views
2

경우 그냥 PowerShell로 밖으로 시작하고 내 명령과 나는 다음과 같은 스크립트가 :파워 쉘 여러 WMI 문

Get-ADComputer -Filter * | 

ForEach-Object { 

    if(Test-Connection -CN $_.dnshostname -Count 1 -BufferSize 16 -Quiet) 

    { 
    write-host $_.dnshostname 
    Get-WmiObject Win32_Process -cn $_.dnshostname | Select  ProcessID,ProcessName,ThreadCount 
    Get-WmiObject Win32_DiskDrive -cn $_.dnshostname; 
    } 



    ELSE { write-host $_.dnshostname unavlible } 

} 

기본적으로 나는 모든 컴퓨터의 내 DC에서 목록을 끌어됩니다 달성하기 위해 노력하고 무엇을, 테스트 중인지 확인한 다음 여러 WMI 쿼리로 폴링합니다. 내가 겪고있는 문제는 첫 번째 Wmi 객체에서 select를 수행 할 때 두 번째 객체에 결과를 반환하지 않아 두 번째 객체에 select가 적용된다고 가정 할 때 두 번째 wmi 객체의 결과가 없다는 것입니다.

내가 어떻게 할 수 있는지 알기. 또한 지금은 컴퓨터의 사용 가능성을 테스트하는 데 ping을 사용하고 있지만 ICMP가 일부 시스템에서는 차단되지만 WMI는 여전히 가능하므로이 방법이 최선이 아닙니다. ICMP는 사용 가능하지만 wmi는 차단됩니다. WMI 쿼리가 작동하는 시스템 목록을 얻는 테스트를 수행하는 더 좋은 방법이 있습니까?

답변

2

내가 v3으로 PowerShell을 v1을에서 발견 한 간단한 해결 방법은하고있다 : 테스트 가용성 서버의 경우

Get-ADComputer -Filter * |  
ForEach-Object {  
    if(Test-Connection -CN $_.dnshostname -Count 1 -BufferSize 16 -Quiet)  
    { 
    write-host $_.dnshostname 
    Get-WmiObject Win32_Process -cn $_.dnshostname | 
    Select ProcessID,ProcessName,ThreadCount 
    out-string -inputobject "" #this line does the trick or just out-default 
    Get-WmiObject Win32_DiskDrive -cn $_.dnshostname; 
    } 
    else { write-host "$($_.dnshostname) unavailable }  
} 

내가 this function를 사용하는이 서버가있는 경우, 당신이 필요로 볼 핑 (ping) 및 기타 프로토콜을 사용 살아 있는지 알 수있는 것은 단지 true입니다. (첫 번째 진단 도구로 icmp 프로토콜을 사용하도록 설정하려면 sysadmin이 도메인 (DMZ 도메인이 아님)로 제안)