# Get-PSDrive

Der Befehl `Get-PSDrive` gibt alle aktuell verfügbaren **PowerShell-Laufwerke (PSDrive)** zurück.

Ein PSDrive stellt einen Speicherort dar, auf den PowerShell über einen einheitlichen Pfad zugreifen kann. Neben klassischen Dateisystemlaufwerken (`C:`, `D:`) gehören dazu beispielsweise auch die Registry (`HKLM:`), Zertifikate (`Cert:`), Umgebungsvariablen (`Env:`) oder Variablen (`Variable:`).

---

## Grundlagen

Ein PSDrive ist **kein physisches Laufwerk**, sondern eine Abstraktion eines PowerShell-Providers.

Dadurch können unterschiedliche Datenspeicher mit denselben Befehlen verwendet werden.

Beispielsweise funktionieren diese Befehle alle nach dem gleichen Prinzip:

```powershell
Get-ChildItem C:\
Get-ChildItem HKLM:\
Get-ChildItem Env:
Get-ChildItem Variable:

```

Welcher Datenspeicher sich dahinter verbirgt, übernimmt der jeweilige Provider.

---

## Syntax

```powershell
Get-PSDrive
```

Ein bestimmtes Laufwerk abrufen:

```powershell
Get-PSDrive C
```

Mehrere Laufwerke:

```powershell
Get-PSDrive C, D
```

Nach Provider filtern:

```powershell
Get-PSDrive -PSProvider FileSystem
```

---

## Ausgabe

Die Ausgabe besteht aus Objekten vom Typ

```powershell
System.Management.Automation.PSDriveInfo

```

Beispiel:

```text
Name      Used (GB) Free (GB) Provider      Root
----      --------- --------- --------      ----
C             120.5      58.3 FileSystem    C:\
Env                             Environment
HKLM                            Registry
Variable                        Variable

```

---

# Eigenschaften

- Name
- Provider
- Root
- CurrentLocation
- Description
- DisplayRoot
- Used
- Free
- MaximumSize
- Credential

---

## Name `[String]`

Der Name des PowerShell-Laufwerks.

Beispiele:

```text
C
D
HKLM
HKCU
Env
Variable
Function
Alias

```

Der Name bildet gleichzeitig den Präfix eines PowerShell-Pfades.

```powershell
C:\Temp
HKLM:\Software
Env:PATH
Variable:Error

```

---

## Provider `[ProviderInfo]`

Der PowerShell-Provider, über den auf den Speicherort zugegriffen wird.

Beispiele:

<table id="bkmrk-provider-beschreibun"><thead><tr><th>Provider</th><th>Beschreibung</th></tr></thead><tbody><tr><td>FileSystem</td><td>Dateisystem</td></tr><tr><td>Registry</td><td>Windows-Registry</td></tr><tr><td>Environment</td><td>Umgebungsvariablen</td></tr><tr><td>Variable</td><td>PowerShell-Variablen</td></tr><tr><td>Alias</td><td>Aliase</td></tr><tr><td>Function</td><td>Funktionen</td></tr><tr><td>Certificate</td><td>Zertifikatsspeicher</td></tr></tbody></table>

---

## Root `[String]`

Der Stammpfad des Laufwerks.

Beispiele:

```text
C:\
D:\
HKEY_LOCAL_MACHINE

```

Virtuelle Laufwerke besitzen häufig keinen klassischen Dateipfad.

---

## CurrentLocation `[String]`

Aktuelles Arbeitsverzeichnis innerhalb des Laufwerks.

Beispielsweise:

```powershell
Set-Location C:\Windows

(Get-PSDrive C).CurrentLocation

```

Ergebnis:

```text
Windows

```

---

## Description `[String]`

Optionale Beschreibung des Laufwerks.

Viele Standardlaufwerke besitzen keine Beschreibung.

Selbst angelegte PSDrives können hier eine Beschreibung erhalten.

---

## DisplayRoot `[String]`

Angezeigter Stammpfad.

Diese Eigenschaft wird hauptsächlich bei Netzwerk- oder benutzerdefinierten Laufwerken verwendet.

Bei normalen Dateisystemlaufwerken ist der Wert häufig leer.

---

## Used `[Int64]`

Belegter Speicherplatz.

Nur für Dateisystemlaufwerke verfügbar.

Angabe erfolgt in Bytes.

---

## Free `[Int64]`

Freier Speicherplatz.

Nur für Dateisystemlaufwerke verfügbar.

Angabe erfolgt ebenfalls in Bytes.

---

## MaximumSize `[Nullable[Int64]]`

Maximal verfügbare Größe.

Diese Eigenschaft wird nur von wenigen Providern genutzt und ist meistens `$null`.

---

## Credential `[PSCredential]`

Anmeldedaten, mit denen das Laufwerk verbunden wurde.

Bei Standardlaufwerken normalerweise `$null`.

Relevant hauptsächlich für mit `New-PSDrive` eingebundene Netzlaufwerke.

---

# Parameter

- Name
- PSProvider
- Scope

---

## -Name

Gibt nur bestimmte Laufwerke zurück.

```powershell
Get-PSDrive C

```

Mehrere:

```powershell
Get-PSDrive C, D

```

---

## -PSProvider

Filtert nach einem bestimmten Provider.

Dateisystem:

```powershell
Get-PSDrive -PSProvider FileSystem

```

Registry:

```powershell
Get-PSDrive -PSProvider Registry

```

Alle Variablen-Laufwerke:

```powershell
Get-PSDrive -PSProvider Variable

```

---

## -Scope

Zeigt Laufwerke eines bestimmten Scopes an.

Dies ist hauptsächlich relevant für mit `New-PSDrive` erstellte Laufwerke.

---

# Typische Beispiele

Alle Laufwerke anzeigen:

```powershell
Get-PSDrive

```

Nur Dateisysteme:

```powershell
Get-PSDrive -PSProvider FileSystem

```

Nur Registry:

```powershell
Get-PSDrive -PSProvider Registry

```

Freien Speicherplatz anzeigen:

```powershell
Get-PSDrive -PSProvider FileSystem |
    Select-Object Name, Used, Free

```

Nur Laufwerksbuchstaben:

```powershell
Get-PSDrive -PSProvider FileSystem |
    Select-Object -ExpandProperty Name

```

---

# Tipps &amp; Tricks

## Dateisystemlaufwerke erkennen

Nicht jedes PSDrive ist ein Festplattenlaufwerk.

```powershell
Get-PSDrive -PSProvider FileSystem

```

liefert ausschließlich echte Dateisysteme.

---

## Speicherplatz in GB berechnen

Die Eigenschaften `Used` und `Free` werden in Bytes zurückgegeben.

```powershell
Get-PSDrive C |
Select-Object Name,
    @{N="Used (GB)";E={[math]::Round($_.Used / 1GB,2)}},
    @{N="Free (GB)";E={[math]::Round($_.Free / 1GB,2)}}

```

---

## Mentales Modell

`Get-PSDrive` zeigt **alle Speicherorte**, die PowerShell wie Laufwerke behandeln kann.

Nicht jedes PSDrive ist ein Datenträger.

Ein PSDrive ist lediglich die Kombination aus:

- einem **Namen** (`C:`, `Env:`, `HKLM:`)
- einem **Provider**
- einem **Stammverzeichnis (Root)**

Dadurch können Dateisysteme, Registry, Umgebungsvariablen oder Zertifikate mit denselben PowerShell-Befehlen angesprochen werden