我想创建一个脚本来检查“computers.csv”中每台计算机上是否存在目录。
这就是我想出来的:
$results = @()
$computers = Get-Content "C:\Users\me\Desktop\Notes\Computers.csv"
foreach ($computer in $computers) {
$path = Test-Path "\\$computer\c$\Program Files\Folder\"
if ($path -eq $true)
$Output = "True"
else
$Output = "False"
}
$details = @{
Computer_Name = $computer
Output = $Output
}
$results += New-Object PSObject -Property $details
$results |
Select-Object -Property Computer_Name,Output |
Export-Csv c:\results.csv -NoTypeInformation
脚本失败了,我不完全确定原因。由于要查询的计算机数量,我需要将脚本导出为CSV。
答案 0 :(得分:2)
您有多个语法错误。您使用if
和else
错过了括号,并且您的foreach
结束括号位于错误的位置。试试这个:
$results = @()
$computers = Get-Content "C:\Users\me\Desktop\Notes\Computers.csv"
foreach ($computer in $computers) {
$path = Test-Path "\\$computer\c$\Program Files\Folder\"
If ($path -eq $true) {
$Output = "True"
}
Else {
$Output = "False"
}
$details = @{
Computer_Name = $computer
Output = $Output
}
$results += New-Object PSObject -Property $details
}
$results | select-object -property Computer_Name, Output | Export-csv c:\results.csv -NoTypeInformation
那就是说,这种模式是应该避免的:
$results = @()
foreach ($item in $set) {
$results += $item
}
$results
问题是$results += $item
将整个数组复制到一个新数组中,然后添加新项。随着阵列大小的增加,这是一个巨大的开销。
尝试这样的事情:
Get-Content "C:\Users\me\Desktop\Notes\Computers.csv" | ForEach-Object {
[PSCustomObject]@{
Computer_Name = $_
Output = Test-Path "\\$_\c$\Program Files\Folder\"
}
} | Export-Csv -Path C:\results.csv -NoTypeInformation