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.
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
- 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.
- Handhabung von Umgebungsvariablen: Wenn ein benutzerdefinierter Feldname über eine Umgebungsvariable festgelegt wird, hat er Vorrang vor dem Skriptparameter.
- 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.
- Informationen zu den Partitionen: Das Skript ruft mit Get-Partition Partitionsdetails ab, wobei es sich auf Partitionen mit zugewiesenen Laufwerksbuchstaben konzentriert.
- 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
- Benötige ich Administratorrechte, um dieses Skript auszuführen? Ja, das Skript benötigt Administratorrechte, um auf detaillierte Laufwerksinformationen zuzugreifen.
- 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.
- 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.