【发布时间】:2015-05-18 21:33:26
【问题描述】:
我有一个自定义 cmdlet,它可以查询每个服务的状态以获取计算机的 CSV 列表,然后很好地输出到 CVS 文件,请参见下面的示例。我想获取这个 CSV 输出(实际上是通过管道传输)然后运行比较;纯数组查询。例如,计算 uniq 计算机的数量并列出在所有计算机上运行的每个服务名称,或列出未在所有计算机上运行的服务。
我经历了许多试验,虽然我可以读取数组输入,从中选择特定的列,但我不能选择 uniq 计算机列表和/或计算它们。下面是我的代码的当前版本,它拒绝折叠 ComputerName 列表并显示 uniq 值和/或正确的 3 计数。
在此示例中,在每个组件上运行的服务的结果应该是:
SVc1我的想法哪里错了?非常感谢您的帮助。虽然不是编程新手,但我是 PS
function myTest {
[cmdletBinding()]
param (
[Parameter(Mandatory=$True,
ValueFromPipeline=$True,
ValueFromPipelineByPropertyName=$True,
HelpMessage="Input CSV file listing ComputerNames, Servicename, State")]
[array]$ListOfSvrsAndSvcs
)
BEGIN {}
PROCESS {
Try {
#$ListOfRunningSvcs = $ListOfSvrsAndSvcs | where {$_.State -eq "Running"} | Select ComputerName, ServiceName
#write-output $ListOfRunningSvcs
$UniqComps = $ListOfSvrsAndSvcs | group {$_.ComputerName} | select ComputerName
write-output $UniqComps
}
Catch {
write-warning $_.Exception.Message
}
finally {}
}
END {}
}
import-csv .\ComputerServicesList.csv | myTest | ft
我的输入 CSV 看起来像:
CompName SvcName 状态
本地主机 Svc1 正在运行
本地主机 Svc2 已停止
Comp1 Svc1 正在运行
Comp1 Svc2 正在运行
Comp1 Svc3 正在运行
Comp2 Svc1 正在运行
Comp2 Svc3 正在运行
【问题讨论】:
-
你设置行的方式是一次一个,所以
Group只有一个对象可以玩。此外,您的文件有CompName并且您正在对不存在的ComputerName进行分组。
标签: arrays powershell csv