Get free disk space for different servers with separate credentials

I’m trying to query Disk space info on Grid box and Export it to CSV.

I was able to use Marc Weisel’s script to make it use different credentials. I used computers.csv

to store the computer name and referenced credentials. This is working although the problem I’m facing is that Grid box opens for all the servers mentioned in the csv.

I want to view all disk space information on the same grid box.

Below are my script and module I’m using

Import-Module D:\get.psm1 
Import-Module D:\out-CSV.psm1 
$ComputerList = Import-Csv -Path d:\Computers.csv; 
$CredentialList = @{ 
    Cred1 = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList 'laptop-pc\laptop', [ConvertTo-SecureString -String 'tamboli' -AsPlainText -Force]; 
    Cred2 = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList 'tnt\administrator', [ConvertTo-SecureString -String 'Atlantic12' -AsPlainText -Force]; 
    } 
foreach [$computer in $ComputerList] { 
Get-DiskFree -ComputerName $Computer.Name -Credential $CredentialList[$Computer.Credential] -Format | ? { $_.Type -like '*fixed*' } | select * -ExcludeProperty Type | Out-GridView -Title 'Servers Space Statistics' 
} 


function Get-DiskFree
{
    [CmdletBinding[]]
    param 
    [
        [Parameter[Position=0,
                   ValueFromPipeline=$true,
                   ValueFromPipelineByPropertyName=$true]]
        [Alias['hostname']]
        [Alias['cn']]
        [string[]]$ComputerName = $env:COMPUTERNAME,
        
        [Parameter[Position=1,
                   Mandatory=$false]]
        [Alias['runas']]
        [System.Management.Automation.Credential[]]$Credential =
        [System.Management.Automation.PSCredential]::Empty,
        
        [Parameter[Position=2]]
        [switch]$Format
    ]
    
    BEGIN
    {
        function Format-HumanReadable 
        {
            param [$size]
            switch [$size] 
            {
                {$_ -ge 1PB}{"{0:#.#'P'}" -f [$size / 1PB]; break}
                {$_ -ge 1TB}{"{0:#.#'T'}" -f [$size / 1TB]; break}
                {$_ -ge 1GB}{"{0:#.#'G'}" -f [$size / 1GB]; break}
                {$_ -ge 1MB}{"{0:#.#'M'}" -f [$size / 1MB]; break}
                {$_ -ge 1KB}{"{0:#'K'}" -f [$size / 1KB]; break}
                default {"{0}" -f [$size] + "B"}
            }
        }
        
        $wmiq = 'SELECT * FROM Win32_LogicalDisk WHERE Size != Null AND DriveType >= 2'
    }
    
    PROCESS
    {
        foreach [$computer in $ComputerName]
        {
            try
            {
                if [$computer -eq $env:COMPUTERNAME]
                {
                    $disks = Get-WmiObject -Query $wmiq `
                             -ComputerName $computer -ErrorAction Stop
                }
                else
                {
                    $disks = Get-WmiObject -Query $wmiq `
                             -ComputerName $computer -Credential $Credential `
                             -ErrorAction Stop
                }
                
                if [$Format]
                {
                    # Create array for $disk objects and then populate
                    $diskarray = @[]
                    $disks | ForEach-Object { $diskarray += $_ }
                    
                    $diskarray | Select-Object @{n='Name';e={$_.SystemName}}, 
                        @{n='Vol';e={$_.DeviceID}},
                        @{n='Size';e={Format-HumanReadable $_.Size}},
                        @{n='Used';e={Format-HumanReadable `
                        [[$_.Size]-[$_.FreeSpace]]}},
                        @{n='Avail';e={Format-HumanReadable $_.FreeSpace}},
                        @{n='Use%';e={[int][[[[$_.Size]-[$_.FreeSpace]]`
                        /[$_.Size] * 100]]}},
                        @{n='FS';e={$_.FileSystem}},
                        @{n='Type';e={$_.Description}}
                }
                else 
                {
                    foreach [$disk in $disks]
                    {
                        $diskprops = @{'Volume'=$disk.DeviceID;
                                   'Size'=$disk.Size;
                                   'Used'=[$disk.Size - $disk.FreeSpace];
                                   'Available'=$disk.FreeSpace;
                                   'FileSystem'=$disk.FileSystem;
                                   'Type'=$disk.Description
                                   'Computer'=$disk.SystemName;}
                    
                        # Create custom PS object and apply type
                        $diskobj = New-Object -TypeName PSObject `
                                   -Property $diskprops
                        $diskobj.PSObject.TypeNames.Insert[0,'BinaryNature.DiskFree']
                    
                        Write-Output $diskobj
                    }
                }
            }
            catch 
            {
                # Check for common DCOM errors and display "friendly" output
                switch [$_]
                {
                    { $_.Exception.ErrorCode -eq 0x800706ba } `
                        { $err = 'Unavailable [Host Offline or Firewall]'; 
                            break; }
                    { $_.CategoryInfo.Reason -eq 'UnauthorizedAccessException' } `
                        { $err = 'Access denied [Check User Permissions]'; 
                            break; }
                    default { $err = $_.Exception.Message }
                }
                Write-Warning "$computer - $err"
            } 
        }
    }
    
    END {}
}

I’m not able to test this, but try replacing these 3 lines:

foreach [$computer in $ComputerList] { 
Get-DiskFree -ComputerName $Computer.Name -Credential $CredentialList[$Computer.Credential] -Format | ? { $_.Type -like '*fixed*' } | select * -ExcludeProperty Type | Out-GridView -Title 'Servers Space Statistics' 
} 

With this:

$Output = foreach [$computer in $ComputerList] { 
Get-DiskFree -ComputerName $Computer.Name -Credential $CredentialList[$Computer.Credential] -Format | ? { $_.Type -like '*fixed*' } | select * -ExcludeProperty Type 
} 
$Output | Out-GridView -Title 'Servers Space Statistics'