Wie man Laufwerkstypen mit PowerShell effizient abruft und speichert

Die effiziente Verwaltung von Hardware-Ressourcen ist für IT-Experten und Managed Service Provider (MSPs) essenziell. Eine oft vorkommende Aufgabe ist die Identifizierung der in einem System installierten Laufwerkstypen.

Ob es um die Unterscheidung zwischen SSDs und HDDs oder um die Protokollierung von Laufwerksdetails zu Inventarisierungszwecken geht, eine zuverlässige Methode zum Abrufen und Speichern dieser Informationen ist von unschätzbarem Wert. In diesem Blogbeitrag wird ein PowerShell-Skript vorgestellt, das für diesen Zweck entwickelt wurde, und dabei werden seine Funktionen, potenziellen Anwendungsfälle und Best Practices erläutert.

Kontext

IT-Experten müssen häufig aus verschiedenen Gründen Details zur Hardware sammeln, z. B. zur Leistungsüberwachung, Bestandsverwaltung und Fehlerbehebung. Das mitgelieferte PowerShell-Skript ist darauf zugeschnitten, Informationen über Festplattenlaufwerke, insbesondere Solid-State-Drives (SSDs) und Hard-Disk-Drives (HDDs), abzurufen und die Ergebnisse in einem benutzerdefinierten Feld zu speichern.

Dieses Skript ist besonders nützlich in Umgebungen, in denen Automatisierung und Präzision von entscheidender Bedeutung sind, da es eine optimierte Lösung für eine allgemeine Verwaltungsaufgabe bietet.

Das Skript:

#Requires -Version 5.1

<#
.SYNOPSIS
    Get the drive types of all fixed SSD and HDD drives.
.DESCRIPTION
    Gets the drive types of all fixed SSD and HDD drives and can save the results to a custom field.

.EXAMPLE
    (No Parameters)
    ## EXAMPLE OUTPUT WITHOUT PARAMS ##
    DiskNumber DriveLetter MediaType BusType SerialNumber
    ---------- ----------- --------- ------- ------------
    0          C:          SSD       SATA    50026B768B3A4E3A
    1          D:          HDD       SATA    WD-WCC4N0JYJYJY

PARAMETER: -CustomFieldParam "ReplaceMeWithAnyMultilineCustomField"
    The name of the custom field to save the results to.
.EXAMPLE
    -CustomFieldParam "ReplaceMeWithAnyMultilineCustomField"
    ## EXAMPLE OUTPUT WITH CustomFieldParam ##
    DiskNumber DriveLetter MediaType BusType SerialNumber
    ---------- ----------- --------- ------- ------------
    0          C:          SSD       SATA    50026B768B3A4E3A
    1          D:          HDD       SATA    WD-WCC4N0JYJYJY
    [Info] Saving the results to the custom field. (ReplaceMeWithAnyMultilineCustomField)
    [Info] The results have been saved to the custom field. (ReplaceMeWithAnyMultilineCustomField)

Custom Field Output:
    #0, Letter: C:, Media: SSD, Bus: SATA, SN: 50026B768B3A4E3A
    #1, Letter: D:, Media: HDD, Bus: SATA, SN: WD-WCC4N0JYJYJY

.PARAMETER CustomFieldName
    The name of the custom field to save the results to.
.INPUTS
    None
.OUTPUTS
    None
.NOTES
    Minimum OS Architecture Supported: Windows 10/Server 2016
    Release Notes: Initial Release
By using this script, you indicate your acceptance of the following legal terms as well as our Terms of Use at https://www.ninjaone.com/terms-of-use.
    Ownership Rights: NinjaOne owns and will continue to own all right, title, and interest in and to the script (including the copyright). NinjaOne is giving you a limited license to use the script in accordance with these legal terms. 
    Use Limitation: You may only use the script for your legitimate personal or internal business purposes, and you may not share the script with another party. 
    Republication Prohibition: Under no circumstances are you permitted to re-publish the script in any script library or website belonging to or under the control of any other software provider. 
    Warranty Disclaimer: The script is provided “as is” and “as available”, without warranty of any kind. NinjaOne makes no promise or guarantee that the script will be free from defects or that it will meet your specific needs or expectations. 
    Assumption of Risk: Your use of the script is at your own risk. You acknowledge that there are certain inherent risks in using the script, and you understand and assume each of those risks. 
    Waiver and Release: You will not hold NinjaOne responsible for any adverse or unintended consequences resulting from your use of the script, and you waive any legal or equitable rights or remedies you may have against NinjaOne relating to your use of the script. 
    EULA: If you are a NinjaOne customer, your use of the script is subject to the End User License Agreement applicable to you (EULA).
#>

[CmdletBinding()]
param (
    [Parameter()]
    [String]$CustomFieldName
)

begin {
    function Test-IsElevated {
        $id = [System.Security.Principal.WindowsIdentity]::GetCurrent()
        $p = New-Object System.Security.Principal.WindowsPrincipal($id)
        $p.IsInRole([System.Security.Principal.WindowsBuiltInRole]::Administrator)
    }
}
process {
    if (-not (Test-IsElevated)) {
        Write-Error -Message "Access Denied. Please run with Administrator privileges."
        exit 1
    }
    if ($env:customFieldName -and $env:customFieldName -ne 'null') {
        $CustomFieldName = $env:customFieldName
    }

    # Get the drive type of all drives
    $Disks = Get-PhysicalDisk | Where-Object { $_.BusType -notlike "File Backed Virtual" -and -not ($_.PhysicalLocation -like "*USB*" -or $_.BusType -like "*USB*") } | Select-Object -Property DeviceID, MediaType, BusType, SerialNumber
    if ($($Disks | Where-Object { $_.MediaType -like "Unspecified" }).Count) {
        Write-Host "[Info] An Unspecified MediaType likely indicates this machine is a VM or there is an issue with that drive."
    }
    # Get the partitions with mounted drive letters
    $Partitions = Get-Partition | Where-Object { $_.DriveLetter -ne $null } | Select-Object -Property DriveLetter, DiskNumber
    # Join the two collections
    $Drives = $Disks | ForEach-Object {
        $Disk = $_
        $Partition = $Partitions | Where-Object { $_.DiskNumber -eq $Disk.DeviceID }
        [PSCustomObject]@{
            DiskNumber   = $_.DeviceID
            DriveLetter  = $Partition.DriveLetter | Where-Object { $_ }
            MediaType    = $_.MediaType
            BusType      = $_.BusType
            SerialNumber = $_.SerialNumber
        }
    }
    $($Drives | Out-String) | Write-Host

    # Save the results to a custom field
    if ($CustomFieldName) {
        Write-Host "[Info] Saving the results to the custom field. ($CustomFieldName)"
        $CustomField = $(
            $Drives | ForEach-Object {
                "#:$($_.DiskNumber), Letter: $($_.DriveLetter), Media: $($_.MediaType), Bus: $($_.BusType), SN: $($_.SerialNumber)"
            }
        ) | Ninja-Property-Set-Piped -Name $CustomFieldName 2>&1
        if ($CustomField.Exception) {
            Write-Host $CustomField.Exception.Message
            Write-Host "[Error] Failed to save the results to the custom field. ($CustomFieldName)"
        }
        else {
            Write-Host "[Info] The results have been saved to the custom field. ($CustomFieldName)"
        }
    }
}
end {
    
    
    
}

 

Greifen Sie auf über 300 Skripte im NinjaOne Dojo zu.

Zugang erhalten

Detailansicht

Lassen Sie uns das Skript Schritt für Schritt aufschlüsseln, um zu verstehen, wie es funktioniert und wie es sein Ziel erreicht. Wie kann man denn Laufwerkstypen mit PowerShell abrufen und speichern?

Voraussetzungen

Das Skript erfordert PowerShell Version 5.1 oder höher. Sie beginnt mit der Definition von .SYNOPSIS und .DESCRIPTION und gibt einen Überblick über seinen Zweck. Die Abschnitte .EXAMPLE zeigen die erwarteten Ausgaben mit und ohne -CustomFieldParam.

Parameter und Ersteinrichtung

Das Skript akzeptiert einen Parameter, CustomFieldName, der den Namen des benutzerdefinierten Feldes angibt, in dem die Ergebnisse gespeichert werden sollen. Es enthält auch eine Funktion Test-IsElevated, um zu prüfen, ob das Skript mit Administratorrechten ausgeführt wird, was für den Zugriff auf detaillierte Laufwerksinformationen erforderlich ist.

Verarbeitung von Laufwerksinformationen

  1. Prüfung auf erhöhte Berechtigungen: Das Skript prüft zunächst, ob es mit den erforderlichen Berechtigungen ausgeführt wird. Ist dies nicht der Fall, bricht es mit einer Fehlermeldung ab.
  2. Handhabung von Umgebungsvariablen: Wenn ein benutzerdefinierter Feldname über eine Umgebungsvariable festgelegt wird, hat er Vorrang vor dem Skriptparameter.
  3. Abrufen von Laufwerksinformationen: Mit Get-PhysicalDisk ruft das Skript alle physischen Laufwerke ab und filtert virtuelle und USB-Laufwerke heraus. Es wählt dann die relevanten Eigenschaften aus: DeviceID, MediaType, BusType und SerialNumber.
  4. Informationen zu den Partitionen: Das Skript ruft mit Get-Partition Partitionsdetails ab, wobei es sich auf Partitionen mit zugewiesenen Laufwerksbuchstaben konzentriert.
  5. Datenaggregation: Es führt die physischen Laufwerks- und Partitionsinformationen zusammen und erstellt eine umfassende Liste der Laufwerke mit ihren jeweiligen Details.

Speichern von Ausgaben in benutzerdefinierten Feldern

Das Skript gibt die Laufwerksinformationen in die Konsole aus. Wenn ein CustomFieldName angegeben wird, formatiert es die Daten und versucht, sie mit dem hypothetischen cmdlet Ninja-Property-Set-Piped im angegebenen benutzerdefinierten Feld zu speichern. Das Skript behandelt mögliche Fehler während dieses Prozesses und gibt Rückmeldung über den Erfolg der Operation.

Potenzielle Anwendungsfälle

Ein MSP verwaltet mehrere Kundensysteme und muss die Hardwarekonfigurationen regelmäßig überprüfen, um eine optimale Leistung zu gewährleisten und mögliche Probleme zu erkennen.

Durch die Verteilung dieses Skripts auf den Kunden-Rechnern kann der MSP die Erfassung der Laufwerkstypen automatisieren und die Daten für spätere Verwendung protokollieren. Auf diese Weise werden Systeme identifiziert, die durch Hardware-Upgrades optimiert werden könnten, z. B. durch den Austausch einer Festplatte gegen eine SSD, um die Leistung zu verbessern.

Vergleiche

Im Vergleich zu manuellen Methoden oder der Verwendung unterschiedlicher Tools bietet dieses Skript einen einheitlichen Ansatz innerhalb der PowerShell-Umgebung, wodurch der Bedarf an externen Anwendungen reduziert wird. Tools wie Windows Management Instrumentation (WMI) oder Software von Drittanbietern können zwar ähnliche Ergebnisse erzielen, aber die Integration dieses Skripts in benutzerdefinierte Felder und seine Automatisierungsfunktionen machen es zu einer effizienteren und skalierbaren Lösung.

FAQs

  1. Benötige ich Administratorrechte, um dieses Skript auszuführen? Ja, das Skript benötigt Administratorrechte, um auf detaillierte Laufwerksinformationen zuzugreifen.
  2. Kann dieses Skript auf virtuellen Maschinen verwendet werden? Das Skript liefert auf virtuellen Maschinen möglicherweise keine genauen Ergebnisse, da der Medientyp als ‚Unspecified‘ aufgeführt sein kann.
  3. Was geschieht, wenn der Name des benutzerdefinierten Feldes nicht angegeben wird? Wenn der Parameter CustomFieldName nicht angegeben wird, gibt das Skript nur die Laufwerksinformationen in die Konsole aus.

Folgen

Die regelmäßige Überprüfung von Laufwerkstypen kann erhebliche Auswirkungen auf die IT-Sicherheit und Leistung haben. So können beispielsweise ältere Festplatten erkannt und ausgetauscht werden, was das Risiko von Datenverlusten aufgrund von Festplattenausfällen verringert. Darüber hinaus kann das Verständnis der Speicherarchitektur bei der Optimierung von Backup-Strategien helfen und sicherstellen, dass wichtige Daten auf der zuverlässigsten Hardware gespeichert werden.

Empfehlungen

  • Führen Sie das Skript immer mit erhöhten Rechten aus.
  • Planen Sie die Ausführung des Skripts für alle verwalteten Systeme regelmäßig, um die Hardware-Inventare auf dem neuesten Stand zu halten.
  • Vergewissern Sie sich, dass geeignete Mechanismen zur Fehlerbehandlung und -protokollierung vorhanden sind, um Probleme während der Ausführung zu beheben.

Abschließende Überlegungen

Dieses PowerShell-Skript bietet eine solide Lösung für IT-Experten und MSPs zum effizienten Abrufen und Speichern von Laufwerkstypen. Durch die Automatisierung dieses Prozesses können Unternehmen genaue Hardware-Inventare führen, die Leistung optimieren und ihre IT-Management-Strategien insgesamt verbessern.

Tools wie NinjaOne können diesen Prozess weiter optimieren, indem sie solche Skripte in umfassendere Automatisierungsworkflows integrieren und so eine vollständige IT-Managementplattform bieten, die einen proaktiven und effizienten Betrieb unterstützt.

Nächste Schritte

Der Aufbau eines effizienten und effektiven IT-Teams erfordert eine zentralisierte Lösung, die als einheitliches Tool zur Bereitstellung von IT-Dienstleistungen fungiert. NinjaOne ermöglicht es IT-Teams, alle Geräte zu überwachen, zu verwalten, zu sichern und zu unterstützen, unabhängig vom Standort, ohne dass eine komplexe Infrastruktur vor Ort erforderlich ist.

Erfahren Sie mehr über NinjaOne Endpoint Management schauen Sie sich eine Live-Tour an oder starten Sie Ihre kostenlose Testversion der NinjaOne Plattform.

Kategorien:

Das könnte Sie auch interessieren

×

Sehen Sie NinjaOne in Aktion!

Mit dem Absenden dieses Formulars akzeptiere ich die Datenschutzerklärung von NinjaOne.

NinjaOne Allgemeine Geschäftsbedingungen für Skripte

Indem Sie unten auf die Schaltfläche „Ich akzeptiere“ klicken, erklären Sie Ihr Einverständnis mit den folgenden rechtlichen Bedingungen sowie mit unseren Nutzungsbedingungen:

  • Eigentumsrechte: NinjaOne besitzt und wird weiterhin alle Rechte, Titel und Interessen an dem Skript (einschließlich des Urheberrechts) behalten. NinjaOne gewährt Ihnen eine eingeschränkte Lizenz zur Nutzung des Skripts in Übereinstimmung mit diesen rechtlichen Bedingungen.
  • Einschränkung der Nutzung: Sie dürfen das Skript nur für Ihre legitimen persönlichen oder internen Geschäftszwecke verwenden und es nicht an Dritte weitergeben.
  • Verbot der Wiederveröffentlichung: Sie sind unter keinen Umständen berechtigt, das Skript in einer Skriptbibliothek, die einem anderen Softwareanbieter gehört oder von diesem kontrolliert wird, erneut zu veröffentlichen.
  • Gewährleistungsausschluss: Das Skript wird „wie gesehen“ und „wie verfügbar“ bereitgestellt, ohne jegliche Garantie. NinjaOne gibt keine Versprechen oder Garantien, dass das Skript frei von Fehlern ist oder dass es Ihre speziellen Bedürfnisse oder Erwartungen erfüllt.
  • Risikoübernahme: Die Verwendung des Skripts erfolgt auf eigene Gefahr. Sie erkennen an, dass die Nutzung des Skripts mit bestimmten Risiken verbunden ist, und Sie verstehen und übernehmen jedes dieser Risiken.
  • Verzicht und Freigabe: Sie machen NinjaOne nicht für nachteilige oder unbeabsichtigte Folgen verantwortlich, die sich aus Ihrer Nutzung des Skripts ergeben, und Sie verzichten auf alle gesetzlichen oder billigkeitsrechtlichen Rechte oder Rechtsmittel, die Sie gegen NinjaOne im Zusammenhang mit Ihrer Nutzung des Skripts haben könnten.
  • EULA: Wenn Sie ein NinjaOne-Kunde sind, unterliegt Ihre Nutzung des Skripts dem für Sie geltenden Endbenutzer-Lizenzvertrag (EULA).