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.

1voto

Himanshu Chauhan Points 636

Je connais des outils psExec que vous pouvez télécharger à partir de aquí

Il existe un psinfo.exe provenant du paquetage d'outils. L'utilisation de base se fait de la manière suivante dans powershell/cmd.

enter image description here

Cependant, vous pouvez avoir beaucoup d'options avec elle.

Utilisation : psinfo [[ \computer [,ordinateur[,..] | @file [-u utilisateur [-p psswd]]] [-h] [-s] [-d] [-c [-t délimiteur]] [filtre]

\computer Exécutez la commande sur l'ordinateur ou les ordinateurs distants spécifiés. Si vous omettez le nom de l'ordinateur, la commande s'exécute sur le système local, et si vous spécifiez un caractère générique (\*), la commande s'exécute sur tous les ordinateurs du domaine actuel.

@file   Run the command on each computer listed in the text file specified.
-u  Specifies optional user name for login to remote computer.
-p  Specifies optional password for user name. If you omit this you will be prompted to enter a hidden password.
-h  Show list of installed hotfixes.
-s  Show list of installed applications.
-d  Show disk volume information.
-c  Print in CSV format.
-t  The default delimiter for the -c option is a comma, but can be overriden with the specified character.

filter Psinfo n'affichera que les données du champ correspondant au filtre. Par exemple, "psinfo service" ne liste que le champ service pack.

1voto

lynx_74 Points 11

Sur PowerShell :

"FreeSpace C:  " + [math]::Round((Get-Volume -DriveLetter C).SizeRemaining / 1Gb) + " GB"

0voto

Michael Dark Points 139

Je me connecte à distance à l'ordinateur en utilisant Enter-PSsession pcName puis je tape Get-PSDrive

Cela donnera la liste de tous les disques et de l'espace utilisé et restant. Si vous avez besoin de voir toutes les informations formatées, envoyez-les à FL comme ceci : Get-PSdrive | FL *

0voto

Kaj Bonfils Points 55

J'ai créé cette fonction simple pour m'aider. Cela rend mes appels beaucoup plus faciles à lire que d'avoir une fonction inline. Get-WmiObject , Where-Object déclarations, etc.

function GetDiskSizeInfo($drive) {
    $diskReport = Get-WmiObject Win32_logicaldisk
    $drive = $diskReport | Where-Object { $_.DeviceID -eq $drive}

    $result = @{
        Size = $drive.Size
        FreeSpace = $drive.Freespace
    }
    return $result
}

$diskspace = GetDiskSizeInfo "C:"
write-host $diskspace.FreeSpace " " $diskspace.Size

0voto

Darkseal Points 18

Si vous souhaitez vérifier plusieurs lettres de lecteur et/ou filtrer entre les lecteurs locaux et les lecteurs réseau, vous pouvez utiliser PowerShell pour tirer parti de la fonction de vérification des lettres de lecteur. Win32_LogicalDisk WMI classe. Voici un exemple rapide :

$localVolumes = Get-WMIObject win32_volume;

foreach ($vol in $localVolumes) {
  if ($vol.DriveLetter -ne $null ) {
    $d = $vol.DriveLetter[0];
    if ($vol.DriveType -eq 3) {
      Write-Host ("Drive " + $d + " is a Local Drive");
    }
    elseif ($vol.DriveType -eq 4) {
      Write-Host ("Drive" + $d + " is a Network Drive");
    }
    else {
      // ... and so on
    }

    $drive = Get-PSDrive $d;
    Write-Host ("Used space on drive " + $d + ": " + $drive.Used + " bytes. `r`n");
    Write-Host ("Free space on drive " + $d + ": " + $drive.Free + " bytes. `r`n");
  }
}

J'ai utilisé la technique ci-dessus pour créer un script Powershell qui vérifie tous les lecteurs et envoie une alerte par e-mail dès qu'ils passent sous un quota défini par l'utilisateur. Vous pouvez l'obtenir à partir de ce poste sur mon blog.

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