1

コンピューターのリストにpingを実行し、結果をテーブルに出力する簡単なスクリプトを作成しようとしていました。私はこれを行うことになりました、それはうまくいきます:

Get-ADComputer -searchbase "OU=Materials,OU=MMC Computers,OU=REI,DC=REIDOMAIN,DC=LOCAL" -filter * | select -expand name | % {
    $output = New-Object PSObject
    $output | Add-Member NoteProperty "Computer name"($_)
    $output | Add-Member NoteProperty "Ping result"("$($(Test-Connection $_ -count 1 -quiet).ToString())")
    write $output }

ただし、最初の2回の試行がうまくいかなかった理由を理解して、後で同じ間違いをしないようにしたいと思います。はい、どうぞ:

スクリプト1:以下の編集を参照してください

Get-ADComputer -searchbase "OU=Materials,OU=MMC Computers,OU=REI,DC=REIDOMAIN,DC=LOCAL" -filter * | 
select -expand name | % { $computer = $_; $obj = "" | 
select @{Name="Computer";Expression="$computer"},`
@{Name="Pingable";Expression="$($(Test-Connection $computer -count 1 -quiet).ToString())"} 
$obj }

出力1:

Computer                                 Pingable
-----—                                   -----—

注:このスクリプトは、テーブルヘッダーの下に、pingを実行しているコンピューターごとに1行の空白行を実際に出力します。

スクリプト2:

$table = @{Expression={$_};Label="Computer"},@{Expression={"$($(Test-Connection $_ -count 1 -quiet).ToString())"};Label="Pingable"}
Get-ADComputer -searchbase "OU=Materials,OU=MMC Computers,OU=REI,DC=REIDOMAIN,DC=LOCAL" -filter * | select -expand name | format-table $table

出力2:

mickeymouse
goofy
minnie
pluto
frank

これはテーブルを出力することすらありません...1行に1つのコンピューター名を出力するだけです。

誰かがこれらの2つの試みで何が悪いのかを説明できれば幸いです。ありがとう!

編集:スクリプト1を機能させました。

Get-ADComputer -searchbase "OU=Materials,OU=MMC Computers,OU=REI,DC=REIDOMAIN,DC=LOCAL" -filter * | 
select @{Name="Computer";Expression={$_.Name}},@{Name="Pingable";Expression={"$($(Test-Connection $_.Name -count 1 -quiet).ToString())"}}; 

スクリプト2についてはまだ興味があります

4

1 に答える 1

2

2番目の例では、-ExpandPropertyofを使用しSelect-Objectて、オブジェクトからデータを効果的に取り除き、文字列の配列をformat-table出力して、リストとして出力します。

この例を参照してください。

#First create the array of objects
$rawData = @( @{"Name"="First Obj"; "OtherParam"=1;}, @{"Name"="Second Obj"; "OtherParam"=2;})
$objects = $rawData | %{new-object -type psobject -prop $_}

#Just output the objects
$objects | format-table

出力:

Name                              OtherParam
----                              ---------- 
First Obj                                  1 
Second Obj                                 2

ここでnameプロパティを選択します。これにより、単一のプロパティ「name」を持つオブジェクトの配列が得られます。

$objects | select name | format-table

出力:

Name
----
First Obj
Second Obj

nameプロパティを展開します。これにより、テーブルが見出しなしでリストされるだけの文字列の配列が得られます。

$objects | select -expand name | format-table

出力:

First Obj
Second Obj
于 2012-07-12T18:28:13.293 に答える