主脚本
$Computers = Get-Content .\computers.txt
If ( test-path .\log.txt ) {
$Log_Successful = Import-CSV .\log.txt | Where-Object {$_.Result -eq "Succesful"}
} ELSE {
Add-Content "Computer Name,Is On,Attempts,Result,Time,Date"
}
$Log_Successful | format-table -autosize
的问题:
Log_Successful。“计算机名称”工作正常,但如果我将4更改为以下内容
$Log_Successful = Import-CSV .\log.txt | Where-Object {$_.Result -eq "Failed"}
Log_Successful。“计算机名称”不再有效...任何想法为什么?
数据集
Computer Name,Is On,Attempts,Result,Time,Date
52qkkgw-94210jv,False,1,Failed,9:48 AM,10/28/2012
HELLBOMBS-PC,False,1,Successful,9:48 AM,10/28/2012
52qkkgw-94210dv,False,1,Failed,9:48 AM,10/28/2012
答案 0 :(得分:3)
如果“成功”,则返回单个对象。它包含属性“计算机名称”。在“失败”的情况下,返回两个对象的数组。它(数组本身)不包含属性“计算机名”。在某些情况下,在PowerShell v3中可以使用符号$array.SomePropertyOfContainedObject
,但在PowerShell v2中,它始终是一个错误。这就是你可能会看到的。
您应该遍历结果对象数组,例如foreach($log in $Log_Successful) {...}
并访问$log
个对象的属性。
最后一个提示。为了确保Import-Csv
调用的结果始终是数组(不是null或单个对象),请使用@()
运算符。
修复后的代码是:
$logs = @(Import-Csv ... | where ...)
# $logs is an array, e.g. you can use $logs.Count
# process logs
foreach($log in $logs) {
# use $log."Computer Name"
}
答案 1 :(得分:0)
我不确定这是不是问题,但你有一个拼写错误,你在Where-Object中与“成功”进行比较,文件中的值是“成功”(缺少's')。
无论如何,什么不起作用?