none
Auslesen des Namens und der Kapazität einer Externen Festplatte RRS feed

  • Frage

  • Hey, 

    ich habe folgendes vor: 

    Ich möchte mithilfe eines Powershell Scripts auslesen welche USB-Festplatte gerade angeschlossen ist und dies zum Schluss in einer .txt Datei abspeichern.

    Wie ich angeschlossene USB Geräte auslesen kann, habe ich schon herausgefunden. Jedoch möchte ich nur ein bestimmtes Gerät auslesen. Wie kann ich dies filtern ? Indem ich es auf bestimmte Hersteller filtere ? In meinem Fall wäre es eine Externe Festplatte von WD.

    Die andere Sache ist, dass ich nur zwei Informationen brauche, zum einen den Festplatten Name wie z.B.  "Meine Festplatte" und zum anderen die verfügbare Kapazität. Mehr brauche ich nicht :)

    Das Ganze soll nun noch kurz in einem Text Dokument abgespeichert werden.

    $Computer = '.'
    
     gwmi Win32_USBControllerDevice -ComputerName $Computer | foreach-object {[wmi]($_.Dependent)} | Sort Caption,Manufacturer,Description,DeviceID `
    | Ft -GroupBy Manufacturer Description,Service,DeviceI

    So kriege ich Informationen zu allen USB Geräten, wie kann ich dies simpel filtern ? Zum anderen: Wie kriege ich den Geräte Namen raus ? Also nicht das Festplattenmodell , sondern so wie ich Sie benannt habe.

    Müsste die Ausgabe in ein Dokument nicht mit:

     Get-Process | Out-File -FilePath C:\Users\Public\Documents 

    funktionieren ?

    Hierbei wird mir nur der Zugriff auf den Pfad verweigert.

    Montag, 28. Mai 2018 23:05

Antworten

  • Moin,

    das sind drei Fragen ;-) Ich fange mal hinten an.

    Out-File braucht einen kompletten Pfad zur Ausgabedatei, nicht zum Ordner, in dem die Datei liegen soll. Du hast praktisch angefordert, dass eine Datei "Documents" unter "Public" erstellt wird, und da gibt es ja schon einen Ordner dieses Namens.

    Platten auslesen: Hier hast Du zwei Probleme:

    1. Der Name ("Label") gehört nicht zum Gerät, sondern zu einer Partition, und deren kann es mehrere geben.
    2. Gerade bei USB-Festplatten wirst Du selten auf eine andere Herstellerangabe als "(Standardlaufwerke) " stoßen. Ich habe hier eine WD Elements und ein FANTEC-Gehäuse, die WD wird als USBSTOR\DISK&VEN_WD&PROD_ELEMENTS_25A3 angezeigt, die FANTEC hingegen als SCSI\DISK&VEN_ASMEDIA&PROD_ASM1153E. Alles also ziemlich unzuverlässig. Den HErsteller bekommst Du höchstens aus der PNPDeviceID.

    Hier als Denkanstoß für weitere Experimente:

    Get-WmiObject Win32_USBControllerDevice | foreach { 
        $device = [wmi]($_.Dependent)
        $disk = Get-WmiObject Win32_DiskDrive -Filter "PNPDeviceID='$($device.DeviceID -replace '\\','\\')'"
        if ($disk) {
            "Model: $($disk.Model)"
            "Size:  $([math]::Round(($disk.Size / 1GB),0))GB"
        }
    }
    und von dort kannst Du mit der Associator-Klasse Win32_DiskDriveToDiskPartition weitere zu den Partitionen gehen und Buchstaben und Labels rauskriegen.


    Evgenij Smirnov

    I work @ msg services ag, Berlin -> http://www.msg-services.de
    I blog (in German) @ http://it-pro-berlin.de
    my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
    Exchange User Group, Berlin -> https://exusg.de
    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com


    In theory, there is no difference between theory and practice. In practice, there is.


    Dienstag, 29. Mai 2018 05:30

Alle Antworten

  • Moin,

    das sind drei Fragen ;-) Ich fange mal hinten an.

    Out-File braucht einen kompletten Pfad zur Ausgabedatei, nicht zum Ordner, in dem die Datei liegen soll. Du hast praktisch angefordert, dass eine Datei "Documents" unter "Public" erstellt wird, und da gibt es ja schon einen Ordner dieses Namens.

    Platten auslesen: Hier hast Du zwei Probleme:

    1. Der Name ("Label") gehört nicht zum Gerät, sondern zu einer Partition, und deren kann es mehrere geben.
    2. Gerade bei USB-Festplatten wirst Du selten auf eine andere Herstellerangabe als "(Standardlaufwerke) " stoßen. Ich habe hier eine WD Elements und ein FANTEC-Gehäuse, die WD wird als USBSTOR\DISK&VEN_WD&PROD_ELEMENTS_25A3 angezeigt, die FANTEC hingegen als SCSI\DISK&VEN_ASMEDIA&PROD_ASM1153E. Alles also ziemlich unzuverlässig. Den HErsteller bekommst Du höchstens aus der PNPDeviceID.

    Hier als Denkanstoß für weitere Experimente:

    Get-WmiObject Win32_USBControllerDevice | foreach { 
        $device = [wmi]($_.Dependent)
        $disk = Get-WmiObject Win32_DiskDrive -Filter "PNPDeviceID='$($device.DeviceID -replace '\\','\\')'"
        if ($disk) {
            "Model: $($disk.Model)"
            "Size:  $([math]::Round(($disk.Size / 1GB),0))GB"
        }
    }
    und von dort kannst Du mit der Associator-Klasse Win32_DiskDriveToDiskPartition weitere zu den Partitionen gehen und Buchstaben und Labels rauskriegen.


    Evgenij Smirnov

    I work @ msg services ag, Berlin -> http://www.msg-services.de
    I blog (in German) @ http://it-pro-berlin.de
    my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
    Exchange User Group, Berlin -> https://exusg.de
    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com


    In theory, there is no difference between theory and practice. In practice, there is.


    Dienstag, 29. Mai 2018 05:30
  • Danke für die ausführliche Antwort, das hat mir weiter geholfen.

    Habe nun etwas experimentiert und habe nun ein Scipt das mir die Information en gibt die ich brauche:

    Start-Transcript -Path 'C:\Test\Festplatte.txt'
    Get-WmiObject Win32_USBControllerDevice | foreach {
        $device = [wmi]($_.Dependent)
        $disk = Get-WmiObject Win32_DiskDrive -Filter "PNPDeviceID='$($device.DeviceID -replace '\\','\\')'"
        if ($disk) {
            "Model: $($disk.Model)"
            "Size:  $([math]::Round(($disk.Size / 1GB),0))GB"
            Get-Volume
        }
    }
    Stop-Transcript

    Mein einziges Problem ist nun dass in das Text Dokument welches ausgegeben wird nicht alles geschrieben wird, sondern nur folgendes:

    **********************
    Die Aufzeichnung wurde gestartet. Die Ausgabedatei ist "C:\Test\Festplatte.txt".
    Model: WD My Passport 0827 USB Device
    Size:  2794GB

    **********************
    Ende der Windows PowerShell-Aufzeichnung
    Endzeit: 20180529161954
    **********************
     

    Kannst du mir da weiterhelfen ?

    Dienstag, 29. Mai 2018 14:24
  • Kannst du mir da weiterhelfen ?

    Setz mal | Out-Default hinter Get-Volume ;-)

    Evgenij Smirnov

    I work @ msg services ag, Berlin -> http://www.msg-services.de
    I blog (in German) @ http://it-pro-berlin.de
    my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
    Exchange User Group, Berlin -> https://exusg.de
    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com


    In theory, there is no difference between theory and practice. In practice, there is.

    Dienstag, 29. Mai 2018 14:29
  • Hat geklappt :) Dankeschön !
    Dienstag, 29. Mai 2018 14:40