Вот пример кода, который отображает информацию о физическом диске на консоли (большое спасибо guyc@computerperformance.co.uk):
Get-WmiObject Win32_DiskDrive | % {
$disk = $_
$partitions = "ASSOCIATORS OF " +
"{Win32_DiskDrive.DeviceID='$($disk.DeviceID)'} " +
"WHERE AssocClass = Win32_DiskDriveToDiskPartition"
Get-WmiObject -Query $partitions | % {
$partition = $_
$drives = "ASSOCIATORS OF " +
"{Win32_DiskPartition.DeviceID='$($partition.DeviceID)'} " +
"WHERE AssocClass = Win32_LogicalDiskToPartition"
Get-WmiObject -Query $drives | % {
New-Object -Type PSCustomObject -Property @{
Disk = $disk.DeviceID
DiskModel = $disk.Model
Partition = $partition.Name
DriveLetter = $_.DeviceID
VolumeName = $_.VolumeName
Size = "{0:N}" -f ($_.Size/1GB) -as [float]
FreeSpace = "{0:N}" -f ($_.FreeSpace/1GB) -as [float]
}
}
}
}
Но я хочу, чтобы вывод консоли шел в файл TXT. Когда я представляю «Out-File», на консоли ничего не идет, но вывод другой. Он не делится (на ГБ) и отображает поля, отличные от выбранных. Вот что я изменил:
Get-WmiObject Win32_DiskDrive | % {
$disk = $_
$partitions = "ASSOCIATORS OF " +
"{Win32_DiskDrive.DeviceID='$($disk.DeviceID)'} " +
"WHERE AssocClass = Win32_DiskDriveToDiskPartition"
Get-WmiObject -Query $partitions | % {
$partition = $_
$drives = "ASSOCIATORS OF " +
"{Win32_DiskPartition.DeviceID='$($partition.DeviceID)'} " +
"WHERE AssocClass = Win32_LogicalDiskToPartition"
Get-WmiObject -Query $drives | **Out-File -filepath "d:\DiskInfo.txt" -append** | % {
New-Object -Type PSCustomObject -Property @{
Disk = $disk.DeviceID
DiskModel = $disk.Model
Partition = $partition.Name
DriveLetter = $_.DeviceID
VolumeName = $_.VolumeName
Size = "{0:N}" -f ($_.Size/1GB) -as [float]
FreeSpace = "{0:N}" -f ($_.FreeSpace/1GB) -as [float]
}
}
}
}
Поэтому я изменил способ реализации OUT-FILE (поместив его в каждую строку вывода):
Get-WmiObject Win32_DiskDrive | % {
$disk = $_
$partitions = "ASSOCIATORS OF " +
"{Win32_DiskDrive.DeviceID='$($disk.DeviceID)'} " +
"WHERE AssocClass = Win32_DiskDriveToDiskPartition"
Get-WmiObject -Query $partitions | % {
$partition = $_
$drives = "ASSOCIATORS OF " +
"{Win32_DiskPartition.DeviceID='$($partition.DeviceID)'} " +
"WHERE AssocClass = Win32_LogicalDiskToPartition"
Get-WmiObject -Query $drives | % {
New-Object -Type PSCustomObject -Property @{
Disk = $disk.DeviceID | Out-File -filepath "d:\DiskInfo.txt" -append
DiskModel = $disk.Model | Out-File -filepath "d:\DiskInfo.txt" -append
Partition = $partition.Name | Out-File -filepath "d:\DiskInfo.txt" -append
DriveLetter = $_.DeviceID | Out-File -filepath "d:\DiskInfo.txt" -append
VolumeName = $_.VolumeName | Out-File -filepath "d:\DiskInfo.txt" -append
Size = "{0:N}" -f ($_.Size/1GB) -as [float] | Out-File -filepath "d:\DiskInfo.txt" -append
FreeSpace = "{0:N}" -f ($_.FreeSpace/1GB) -as [float] | Out-File -filepath "d:\DiskInfo.txt" -append
}
}
}
}
Теперь он не только разделяет консоль (заголовки) и TXT-файл (значения), но также отображает переменные, отличные от предыдущих, и не выполняет деление, просто показывает количество байтов, а не ГБ.
Может ли кто-нибудь настроить меня на использование OUT-FILE - или лучший вариант?
Спасибо!