Voici un exemple de code qui affiche des informations sur le disque physique sur la console (avec beaucoup de remerciements à 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]
}
}
}
}
Mais je veux que la sortie de la console aille dans un fichier TXT. Quand j'introduis "Out-File", rien ne se passe sur la console, mais le résultat est différent. Il ne se divise pas (en Go) et affiche des champs différents de ceux que j'ai sélectionnés. Voici ce que j'ai changé:
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]
}
}
}
}
J'ai donc changé la manière dont j'ai implémenté OUT-FILE (en le mettant sur chaque ligne de sortie):
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
}
}
}
}
Désormais, il divise non seulement la console (en-têtes) et le fichier TXT (valeurs), mais affiche également des variables différentes de celles d’avant et ne fait pas la division, mais affiche uniquement le nombre d’octets, pas les Go.
Est-ce que quelqu'un peut me mettre au courant en utilisant OUT-FILE - ou une meilleure option?
Merci!