Aquí hay un código de muestra que muestra información del disco físico en la consola (con muchas gracias a 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]
}
}
}
}
Pero quiero que la salida de la consola vaya a un archivo TXT. Cuando presento "Out-File", no sale nada en la consola, pero el resultado es diferente. No se divide (en GB) y muestra campos diferentes a los que seleccioné. Esto es lo que cambié:
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]
}
}
}
}
Así que cambié la forma en que implementé el OUT-FILE (poniéndolo en cada línea de salida):
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
}
}
}
}
Ahora no solo se divide entre la consola (encabezados) y el archivo TXT (valores), sino que también muestra diferentes variables que antes, y no hace la división, solo muestra el número de bytes, no GB.
¿Alguien puede aclararme el uso de OUT-FILE, o una mejor opción?
¡Gracias!