janvier
2012
Voici un petit script permettant de lister l’ensemble des volumes d’un serveur et des différents mount points:
{
$Capacity = $volume.capacity/1073741824;
$freeSpace= $volume.freespace/1073741824;
$used = $Capacity - $freeSpace;
write-host $volume.name ' - Capacity:' $Capacity ' - Free space:' $freespace ' - Used:' $used
}
On peut l’étendre facilement pour l’utiliser sur un serveur distant l’autorisant grace au paramètre -ComputerName de l’alias gwmi:
(Au passage un peu de cosmétique pour spécifier la mesure des volumes et une petite information intéressante, la taille du block de disque)
foreach($volume IN gwmi -ComputerName $TargetComputer -Class win32_volume)
{
$Capacity = $volume.capacity/1073741824;
$freeSpace= $volume.freespace/1073741824;
$used = $Capacity - $freeSpace;
write-host $volume.name ' - Capacity(GB):' $Capacity ' - Free space(GB):' $freespace ' - Used(GB):' $used ' - Block size(K):' $volume.blocksize
}
Allons un peu plus loin et faisons maintenant la meme chose, sur un ensemble de serveurs listés dans un fichier:
Au passage, un petit filtre pour ne prendre que les disques durs locaux.
foreach ($TargetComputer in get-content $monFichierServeur)
{
foreach($volume IN gwmi -ComputerName $TargetComputer -Class win32_volume)
{
if ($volume.DriveType -eq 3) #Filtrons sur les disques durs
{
$Capacity = $volume.capacity/1073741824;
$freeSpace= $volume.freespace/1073741824;
$used = $Capacity - $freeSpace;
write-host 'ServerName:' $TargetComputer ' - VolumeName:' $volume.name ' - Capacity(GB):' $Capacity ' - FreeSpace(GB):' $freespace ' - Used(GB):' $used ' - BlockSize(K):' $volume.blocksize
}
}
}
Continuons un peu le chemin, ca devient dur de s’imaginer lire toute une console du listing des volumes de tous nos serveurs:
Ajoutons un fichier de sortie nommer comme avec le nom du serveur au format .csv:
$OutPath = "c:\powershell\out\"
foreach ($TargetComputer in get-content $monFichierServeur)
{
$outFile = $OutPath + $TargetComputer + ".csv"
"""ServerName"";""VolumeName"";""Capacity(GB)"";""FreeSpace(GB)"";""Used(GB)"";""BlockSize(K)""" | out-file $outFile
foreach($volume IN gwmi -ComputerName $TargetComputer -Class win32_volume)
{
if ($volume.DriveType -eq 3) #Filtrons sur les disques durs
{
$Capacity = $volume.capacity/1073741824;
$freeSpace = $volume.freespace/1073741824;
$volumeName = $volume.name
$blockSize = $volume.blocksize
$used = $Capacity - $freeSpace;
""""+$TargetComputer+""";"""+$volumeName+""";"""+$Capacity+""";"""+$freespace+""";"""+$used+""";"""+$blockSize+"""" | out-file $outFile -append
}
}
}
Terminons avec un bout de code a sauvegarder dans un fichier de type .ps1 auquel on peut passer 2 arguments: le nom du fichier de serveur et le path de sortie:
(
[string]$monFichierServeur,
[string]$outPath
)
function get-volumes
(
[string]$monFichierServeur,
[string]$outPath
)
{
Write-Host $outPath
foreach ($TargetComputer in get-content $monFichierServeur)
{
$outFile = $OutPath + "\" + $TargetComputer + ".csv"
"""ServerName"";""VolumeName"";""Capacity(GB)"";""FreeSpace(GB)"";""Used(GB)"";""BlockSize(K)""" | out-file $outFile
foreach($volume IN gwmi -ComputerName $TargetComputer -Class win32_volume)
{
if ($volume.DriveType -eq 3) #Filtrons sur les disques durs
{
$Capacity = $volume.capacity/1073741824;
$freeSpace = $volume.freespace/1073741824;
$volumeName = $volume.name
$blockSize = $volume.blocksize
$used = $Capacity - $freeSpace;
""""+$TargetComputer+""";"""+$volumeName+""";"""+$Capacity+""";"""+$freespace+""";"""+$used+""";"""+$blockSize+"""" | out-file $outFile -append
}
}
}
}
get-volumes $monFichierServeur $outPath
Soit le fichier VolumeInfoOutFileParam.ps1, l’appel se fait de la manière suivante: