我编写了一个简单的脚本,它应该从 OU 获取计算机列表,并报告每台可访问计算机上的磁盘大小和可用空间量。
$computers = Get-ADComputer -SearchBase "ou=Test,ou=test,ou=test,dc=test,dc=test,dc=net" -Filter * | select -ExpandProperty Name
$output = Foreach ($item in $computers) {
Write-host $item
$disk = Get-WmiObject Win32_LogicalDisk -Computer $item -Filter "DeviceID='C:'"
$disk_size = [math]::Round($disk.Size/1GB,2)
Write-host $disk_size
$disk_freespace = [math]::Round($disk.Freespace/1GB,2)
Write-Host $disk_freespace
}
$output | Export-Csv "networkpath\free_space_on_c_drive.csv" -notypeinformation -encoding "unicode"
输出在屏幕上看起来不错,但导出的 CSV 文件为空。我想我可以更改foreach
为,ForEach-Object
但我认为将每个脚本放在一个衬里上并不是一个好习惯,如果我需要添加更多动作,那会很痛苦。
这是我根据评论更新的代码:
$computers = Get-ADComputer -SearchBase "ou=t,ou=test,ou=Production,ou=test,dc=test,dc=test,dc=net" -Filter * | select -ExpandProperty Name
$output = Foreach ($item in $computers) {
$disk = Get-WmiObject Win32_LogicalDisk -Computer $item -Filter "DeviceID='C:'"
$disk_size = [math]::Round($disk.Size/1GB,2)
$disk_freespace = [math]::Round($disk.Freespace/1GB,2)
$output = [PSCustomObject]@{
Name = $item
Size = $disk_size
FreeSpace = $disk_freespace
}
}
$output | Export-Csv "networkpath\$((Get-Date).ToString("yyyyMMdd_HHmmss"))_free_space_on_c_drive.csv" -notypeinformation -encoding "unicode"
但现在我的 CSV 文件中只有一条记录。我究竟做错了什么?