143 votes

Comment obtenir la capacité du disque et l'espace libre d'un ordinateur distant ?

J'ai cette phrase toute faite :

get-WmiObject win32_logicaldisk -Computername remotecomputer

et le résultat est le suivant :

DeviceID     : A:
DriveType    : 2
ProviderName :
FreeSpace    :
Size         :
VolumeName   :

DeviceID     : C:
DriveType    : 3
ProviderName :
FreeSpace    : 20116508672
Size         : 42842714112
VolumeName   :

DeviceID     : D:
DriveType    : 5
ProviderName :
FreeSpace    :
Size         :
VolumeName   :

Comment puis-je obtenir Freespace y Size de DeviceID C: ? J'ai besoin d'extraire uniquement ces deux valeurs, sans autres informations. J'ai essayé avec Select cmdlet, mais sans effet.

Editar: J'ai besoin d'extraire uniquement les valeurs numériques et de les stocker dans des variables.

156voto

Une solution beaucoup plus simple :

Get-PSDrive C | Select-Object Used,Free

et pour les ordinateurs distants (besoins Powershell Remoting )

Invoke-Command -ComputerName SRV2 {Get-PSDrive C} | Select-Object PSComputerName,Used,Free

154voto

Shay Levy Points 41404
$disk = Get-WmiObject Win32_LogicalDisk -ComputerName remotecomputer -Filter "DeviceID='C:'" |
Select-Object Size,FreeSpace

$disk.Size
$disk.FreeSpace

Pour extraire uniquement les valeurs et les affecter à une variable :

$disk = Get-WmiObject Win32_LogicalDisk -ComputerName remotecomputer -Filter "DeviceID='C:'" |
Foreach-Object {$_.Size,$_.FreeSpace}

68voto

CPU 100 Points 2269

Une seule commande, simple et propre, mais qui ne fonctionne que pour les disques locaux.

Get-PSDrive

enter image description here

Vous pouvez toujours utiliser cette commande sur un serveur distant en faisant un Enter-PSSession -Computername ServerName et ensuite exécuter le Get-PSDrive il tirera les données comme si vous l'avez exécuté à partir du serveur.

19voto

mweisel Points 181

Il y a quelque temps, j'ai créé une fonction avancée PowerShell (script cmdlet) qui permet d'interroger plusieurs ordinateurs.

Le code de la fonction fait un peu plus de 100 lignes, vous pouvez le trouver ici : Version PowerShell de la commande df

Consultez le Utilisation pour des exemples. L'exemple d'utilisation suivant interroge un ensemble d'ordinateurs distants (entrée du pipeline PowerShell) et affiche la sortie sous forme de tableau avec des valeurs numériques sous une forme lisible par l'homme :

PS> $cred = Get-Credential -Credential 'example\administrator'
PS> 'db01','dc01','sp01' | Get-DiskFree -Credential $cred -Format | Format-Table -GroupBy Name -AutoSize

   Name: DB01

Name Vol Size  Used  Avail Use% FS   Type
---- --- ----  ----  ----- ---- --   ----
DB01 C:  39.9G 15.6G 24.3G   39 NTFS Local Fixed Disk
DB01 D:  4.1G  4.1G  0B     100 CDFS CD-ROM Disc

   Name: DC01

Name Vol Size  Used  Avail Use% FS   Type
---- --- ----  ----  ----- ---- --   ----
DC01 C:  39.9G 16.9G 23G     42 NTFS Local Fixed Disk
DC01 D:  3.3G  3.3G  0B     100 CDFS CD-ROM Disc
DC01 Z:  59.7G 16.3G 43.4G   27 NTFS Network Connection

   Name: SP01

Name Vol Size   Used   Avail Use% FS   Type
---- --- ----   ----   ----- ---- --   ----
SP01 C:  39.9G  20G    19.9G   50 NTFS Local Fixed Disk
SP01 D:  722.8M 722.8M 0B     100 UDF  CD-ROM Disc

11voto

Greg Bray Points 3352

Une autre méthode consiste à convertir une chaîne en un objet WMI :

$size = ([wmi]"\\remotecomputer\root\cimv2:Win32_logicalDisk.DeviceID='c:'").Size
$free = ([wmi]"\\remotecomputer\root\cimv2:Win32_logicalDisk.DeviceID='c:'").FreeSpace

Vous pouvez également diviser les résultats par 1GB ou 1MB si vous souhaitez des unités différentes :

$disk = ([wmi]"\\remotecomputer\root\cimv2:Win32_logicalDisk.DeviceID='c:'")
"Remotecomputer C: has {0:#.0} GB free of {1:#.0} GB Total" -f ($disk.FreeSpace/1GB),($disk.Size/1GB) | write-output

La sortie est : Remotecomputer C: has 252.7 GB free of 298.0 GB Total

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X