2

私はpowershellを使い始めたばかりで、次のスクリプトがあります:

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 オブジェクトで選択を行っているときに、選択が 2 番目のオブジェクトに適用されてデータが返されないと想定しているため、2 番目の wmi オブジェクトの結果が得られないことです。

どうすればこれを行うことができるか考えてください。また、現在、マシンの可用性をテストするために ping を使用していますが、一部のシステムでは ICMP がブロックされているため、これは最善ではありませんが、WMI は引き続き可能です。ICMP が利用可能であるが wmi がブロックされている場合も同様です。WMI クエリが機能するシステムのリストを取得するテストを実行するより良い方法はありますか?

4

1 に答える 1

2

powershell v1からv3まで見つけた簡単な回避策は次のとおりです。

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 }    
}

可用性サーバーをテストするために、私はこの関数 を使用します。ping やその他のプロトコルを使用して、サーバーが稼働trueしているかどうかを確認します。icmp(システム管理者として、最初の診断ツールとしてプロトコルを有効にするように (DMZ ドメインではなく) ドメインで提案します)

于 2012-12-06T19:51:36.007 に答える