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 }

但是,我想了解为什么我的前两次尝试都没有成功,这样我以后就可以避免犯同样的错误。他们来了:

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

4

1 回答 1

2

在您的第二个示例中,您使用的-ExpandPropertySelect-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

现在选择名称属性,这给出了一个只有一个属性“名称”的对象数组

$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 回答