如何解决Powershell |分析已使用和免费存储服务器并将其导出到CSV的脚本
我需要创建一个脚本来检查我们网络内主机的可用和已用存储。将主机加载到阵列中,然后在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"
}
}
Thx btw:)
解决方法
您将希望将服务器名称“胶粘”到每个关联的$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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。