电源壳 |分析使用的脚本和服务器的免费存储,然后将其导出到 CSV

Powershell | Script that Analysis Used and Free Storage of Servers and than exports it to an CSV

我需要创建一个脚本来检查我们网络中主机的可用和已用存储空间。主机被加载到一个阵列中,然后那些具有空闲 Space 和大小的磁盘显示在 PowerShell 中。 现在我希望将所有这些内容导出到一个 csv 文件,以便您可以更轻松地分析数据。

这是脚本:

$servers = @("server1", "server2", "server3")

Foreach ($server in $servers)
{
    $disks = Get-WmiObject Win32_LogicalDisk -ComputerName $server -Filter DriveType=3 | 
        Select-Object DeviceID, 
            @{'Name'='Size'; 'Expression'={[math]::truncate($_.size / 1GB)}}, 
            @{'Name'='Freespace'; 'Expression'={[math]::truncate($_.freespace / 1GB)}}

    $server

    foreach ($disk in $disks)
    {
        $disk.DeviceID + $disk.FreeSpace.ToString("N0") + "GB / " + $disk.Size.ToString("N0") + "GB"
        

     }
 }
 

顺便说一句:)

与其尝试通过手动输出 $server 值来控制输出格式,不如将服务器名称“粘附”到每个关联的 $disk 对象上,这样会更有效更容易导出到 CSV(使用正确的服务器名称):

$servers = @("server1", "server2", "server3")

$allDisks = foreach ($server in $servers)
{
    # Instead of assigning to `$disks` inside the loop, 
    # we let the output from all loop executions "bubble up" 
    # to the assignment to `$allDisks`
    Get-WmiObject Win32_LogicalDisk -ComputerName $server -Filter DriveType=3 | 
        Select-Object @{'Name'='ComputerName'; 'Expression'={$server}},
            DeviceID, 
            @{'Name'='Size'; 'Expression'={[math]::truncate($_.size / 1GB)}}, 
            @{'Name'='Freespace'; 'Expression'={[math]::truncate($_.freespace / 1GB)}}
}

现在每个对象都附加了正确的服务器名称,我们可以轻松导出为 CSV:

$allDisks |Export-Csv .\path\to\output.csv -NoTypeInformation

...我们还可以使用 PowerShell 的本机格式化子系统来很好地处理交互式 shell 中的输出:

$allDisks |Format-Table DeviceID,Size,FreeSpace -GroupBy ComputerName