如果路径存在并导出为CSV,请检查多台计算机

时间:2018-01-03 19:12:19

标签: powershell csv

我想创建一个脚本来检查“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。

1 个答案:

答案 0 :(得分:2)

您有多个语法错误。您使用ifelse错过了括号,并且您的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