user8162541
user8162541

Reputation:

Check Multiple Computers if Path Exists and Export to CSV

I want to make a script that will check whether or not a directory exists on each computer in "computers.csv".

This is what I've come up with:

$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

Script is failing and I'm not entirely sure why. I need the script to export to a CSV due to how many computers are being queried.

Upvotes: 0

Views: 1771

Answers (1)

Bacon Bits
Bacon Bits

Reputation: 32155

You've got several syntax errors. You're missing brackets with if and else, and your foreach closing bracket is in the wrong place. Try this:

$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

That said, this pattern is one that should be avoided:

$results = @()
foreach ($item in $set) {
    $results += $item
}
$results

The problem is that $results += $item copies the entire array into a new array and then adds the new item. It's a huge overhead as the size of the array increases.

Try something like this instead:

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

Upvotes: 1

Related Questions