我想做一个脚本,用来检查"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,因为有多少台计算机正在被查询。
发布于 2018-01-04 03:47:41
你有几个语法错误。您缺少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
https://stackoverflow.com/questions/48083706
复制相似问题