简单的脚本ping PC,输出表 - 出了什么问题?

时间:2012-07-12 16:02:52

标签: powershell

我正在尝试编写一个简单的脚本来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 }

但是,我想了解为什么我的前两次尝试不起作用,以便我可以避免以后犯同样的错误。他们在这里:

脚本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的每台计算机打印一个空白行。

脚本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正常工作。

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感到好奇

1 个答案:

答案 0 :(得分:2)

在第二个示例中,您正在使用-ExpandProperty Select-Object,它有效地从对象中剥离数据并输出一个字符串数组,format-table然后将其作为列表输出。< / p>

见这个例子:

#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