# Klassen

Verschiedene vordefinierte Klassen in PowerShell und .NET im Namespace `<span>System</span>`

# Guid

Die Klasse `Guid` dient zum Erstellen und Verwalten von **Global Unique Identifiers (GUIDs)**.

Eine GUID ist eine 128-Bit lange Kennung, die mit extrem hoher Wahrscheinlichkeit weltweit eindeutig ist. Sie wird häufig verwendet, um Objekte, Dateien, Datenbankeinträge oder Sitzungen eindeutig zu identifizieren.

---

## **Grundlagen**

Im Gegensatz zu Klassen wie `Button` oder `Form` besitzt `Guid` keine grafische Darstellung.

Sie dient ausschließlich dazu, eindeutige Kennungen zu erzeugen und zu verarbeiten.

- `Guid` → erzeugt eindeutige Kennungen
- `Math` → führt mathematische Berechnungen aus
- `DateTime` → verarbeitet Datum und Uhrzeit
- `Random` → erzeugt Zufallszahlen

### GUID erzeugen

```powershell
# Neue GUID erzeugen
$guid = [Guid]::NewGuid()

$guid
```

Ausgabe:

```
0f8fad5b-d9cb-469f-a165-70867728950e
```

---

### GUID aus einem String erstellen

```powershell
$guid = [Guid]::Parse(
    "0f8fad5b-d9cb-469f-a165-70867728950e"
)
```

---

### Leere GUID

```powershell
[Guid]::Empty
```

Ausgabe:

```
00000000-0000-0000-0000-000000000000
```

Diese GUID besitzt ausschließlich Nullen und dient häufig als Standard- oder Platzhalterwert.

---

## **Eigenschaften**

<table id="bkmrk-eigenschaft-beschrei"><thead><tr><th>Eigenschaft</th><th>Beschreibung</th></tr></thead><tbody><tr><td>`Empty`</td><td>Enthält eine GUID, deren sämtliche Bits auf `0` gesetzt sind.</td></tr></tbody></table>

---

<details id="bkmrk-empty-empty-typ-%3D-sy"><summary>Empty</summary>

### **Empty**

**Typ** = `System.Guid`

`Empty` stellt eine leere GUID dar.

Sie wird häufig verwendet, um zu prüfen, ob einer Variablen bereits eine gültige GUID zugewiesen wurde.

```powershell
if ($id -eq [Guid]::Empty) {
    "Keine GUID vorhanden."
}

```

</details>---

## **Methoden**

<table id="bkmrk-methode-beschreibung"><thead><tr><th>Methode</th><th>Beschreibung</th></tr></thead><tbody><tr><td>`NewGuid()`</td><td>Erstellt eine neue eindeutige GUID.</td></tr><tr><td>`Parse()`</td><td>Erstellt eine GUID aus einem String.</td></tr><tr><td>`TryParse()`</td><td>Versucht einen String in eine GUID umzuwandeln.</td></tr><tr><td>`ToString()`</td><td>Gibt die GUID als Zeichenkette zurück.</td></tr><tr><td>`Equals()`</td><td>Vergleicht zwei GUIDs.</td></tr><tr><td>`CompareTo()`</td><td>Vergleicht zwei GUIDs für Sortierungen.</td></tr></tbody></table>

---

<details id="bkmrk-newguid%28%29-newguid%28%29-"><summary>NewGuid()</summary>

### **NewGuid()**

```powershell
[Guid]::NewGuid()
```

#### Beschreibung

Erzeugt eine neue zufällige GUID.

Jeder Aufruf liefert eine neue Kennung, die mit extrem hoher Wahrscheinlichkeit eindeutig ist.

#### Rückgabe

**Rückgabetyp** `System.Guid`

#### Beispiel

```powershell
$id = [Guid]::NewGuid()

$id # fd5d1b64-ac86-46b5-a511-92c68ce09d2b
```

</details><details id="bkmrk-parse%28%29-parse%28%29-%5Bgui"><summary>Parse()</summary>

### **Parse()**

```powershell
[Guid]::Parse($string)
```

#### Beschreibung

Konvertiert einen String in ein `Guid`-Objekt.

Ist der String ungültig, wird eine Ausnahme ausgelöst.

#### Rückgabe

Rückgabetyp `System.Guid`

#### Beispiel

```powershell
$id = [Guid]::Parse(
    "0f8fad5b-d9cb-469f-a165-70867728950e"
)
```

</details><details id="bkmrk-tryparse%28%29-tryparse%28"><summary>TryParse()</summary>

### **TryParse()**

```powershell
[Guid]::TryParse($string, [ref]$guid)
```

#### Beschreibung

Versucht einen String in eine GUID umzuwandeln.

Im Gegensatz zu `Parse()` wird **keine Ausnahme** ausgelöst, wenn der String ungültig ist.

#### Rückgabe

Rückgabetyp `System.Boolean`

#### Beispiel

```powershell
$guid = [Guid]::Empty

if ([Guid]::TryParse($text, [ref]$guid)) {
    "Gültige GUID"
}
else {
    "Ungültige GUID"
}
```

</details><details id="bkmrk-tostring%28%29-tostring%28"><summary>ToString()</summary>

### **ToString()**

```powershell
$guid.ToString()
```

#### Beschreibung

Gibt die GUID als Zeichenkette zurück.

#### Rückgabe

Rückgabetyp `System.String`

#### Beispiel

```powershell
$guid = [Guid]::NewGuid()

$guid.ToString()
```

</details><details id="bkmrk-equals%28%29-equals%28%29-%24g"><summary>Equals()</summary>

### **Equals()**

```powershell
$guid1.Equals($guid2)
```

#### Beschreibung

Vergleicht zwei GUIDs auf Gleichheit.

#### Rückgabe

Rückgabetyp `System.Boolean`

#### Beispiel

```powershell
$id1 = [Guid]::NewGuid()
$id2 = $id1

$id1.Equals($id2)
```

</details><details id="bkmrk-compareto%28%29-comparet"><summary>CompareTo()</summary>

### **CompareTo()**

```powershell
$guid1.CompareTo($guid2)
```

#### Beschreibung

Vergleicht zwei GUIDs.

Die Methode wird hauptsächlich zum Sortieren verwendet.

#### Rückgabe

Rückgabetyp `System.Int32`

- `< 0` → kleiner
- `0` → gleich
- `> 0` → größer

</details>---

## **Tipps &amp; Tricks**

### Neue eindeutige Dateinamen erzeugen

```powershell
$file = "{0}.txt" -f ([Guid]::NewGuid())
```

Beispiel:

```
92d4bb75-0d95-4d9d-9d88-d7548cb9cbf4.txt
```

---

### Prüfen, ob ein String eine gültige GUID ist

```powershell
[Guid]::TryParse($text, [ref]([Guid]::Empty))
```

# Math

Die Klasse **Math** stellt eine Sammlung mathematischer Funktionen und Konstanten bereit. Sie enthält ausschließlich **statische Methoden und Felder**, weshalb kein Objekt erstellt werden muss.

Mit `Math` lassen sich unter anderem:

- Zahlen runden
- Beträge berechnen
- Potenzen und Wurzeln bestimmen
- Minimal- und Maximalwerte ermitteln
- trigonometrische Funktionen verwenden
- mathematische Konstanten wie π oder e nutzen

Die Klasse gehört zum Namespace **System** und steht in PowerShell standardmäßig zur Verfügung.

---

## **Grundlagen**

<table id="bkmrk-eigenschaft-wert-nam"><thead><tr><th>Eigenschaft</th><th>Wert</th></tr></thead><tbody><tr><td>Namespace</td><td>`System`</td></tr><tr><td>Assembly</td><td>`System.Runtime`</td></tr><tr><td>Instanziierbar</td><td>❌ Nein</td></tr><tr><td>Statisch</td><td>✅ Ja</td></tr><tr><td>Vererbt von</td><td>`Object`</td></tr></tbody></table>

### Klasse verwenden

Da alle Mitglieder statisch sind, erfolgt der Aufruf direkt über den Klassennamen.

```powershell
[Math]::Sqrt(25)
```

Ausgabe

```
5
```

---

### Keine Instanziierung erforderlich

Im Gegensatz zu vielen anderen .NET-Klassen wird kein Objekt erzeugt.

**Nicht erforderlich**

```powershell
New-Object Math
```

**Stattdessen**

```powershell
[Math]::Pow(2,8)
```

---

### Rückgabewerte

Die meisten Methoden geben einen numerischen Wert zurück.

Je nach Methode erfolgt die Rückgabe beispielsweise als:

<table id="bkmrk-datentyp-beschreibun"><thead><tr><th>Datentyp</th><th>Beschreibung</th></tr></thead><tbody><tr><td>Double</td><td>Gleitkommazahl</td></tr><tr><td>Int32</td><td>Ganze Zahl</td></tr><tr><td>Decimal</td><td>Dezimalzahl (je nach Parameter)</td></tr></tbody></table>

---

## Konstanten

<table id="bkmrk-name-typ-beschreibun"><thead><tr><th>Name</th><th>Typ</th><th>Beschreibung</th></tr></thead><tbody><tr><td>PI</td><td>Double</td><td>Kreiszahl π</td></tr><tr><td>E</td><td>Double</td><td>Eulersche Zahl</td></tr></tbody></table>

### Beispiel

```powershell
[Math]::PI
[Math]::E
```

Ausgabe

```
3,14159265358979
2,71828182845905
```

---

## **Methoden**

### Übersicht

<table id="bkmrk-methode-beschreibung"><thead><tr><th>Methode</th><th>Beschreibung</th></tr></thead><tbody><tr><td>Abs()</td><td>Berechnet den Betrag einer Zahl</td></tr><tr><td>Ceiling()</td><td>Rundet auf die nächstgrößere ganze Zahl</td></tr><tr><td>Clamp()</td><td>Begrenzt einen Wert auf einen Bereich</td></tr><tr><td>Floor()</td><td>Rundet auf die nächstkleinere ganze Zahl</td></tr><tr><td>Max()</td><td>Gibt den größeren Wert zurück</td></tr><tr><td>Min()</td><td>Gibt den kleineren Wert zurück</td></tr><tr><td>Pow()</td><td>Berechnet Potenzen</td></tr><tr><td>Round()</td><td>Rundet Zahlen</td></tr><tr><td>Sign()</td><td>Bestimmt das Vorzeichen</td></tr><tr><td>Sqrt()</td><td>Berechnet Quadratwurzeln</td></tr><tr><td>Truncate()</td><td>Entfernt Nachkommastellen</td></tr></tbody></table>

<details id="bkmrk-betrag-betrag-%5Bmath%5D"><summary>Abs()</summary>

### **Abs()**

Berechnet den Betrag einer Zahl

```powershell
[Math]::Abs(-15)
```

Ausgabe

```
15
```

</details><details id="bkmrk-wert-begrenzen-wert-"><summary>Clamp()</summary>

### **Clamp()**

Die Methode **Clamp()** begrenzt einen Wert auf einen angegebenen Minimal- und Maximalwert.   
Liegt der Wert innerhalb des Bereichs, wird er unverändert zurückgegeben.

<p class="callout info">Diese Methode ist ab **.NET Core 2.0** bzw. **.NET Standard 2.1** verfügbar.   
Sie steht daher **nicht** in **Windows PowerShell 5.1 (.NET Framework)** zur Verfügung, sondern erst ab **PowerShell Core 6.0**.</p>

#### Syntax

```powershell
[Math]::Clamp(<Wert>, <Minimum>, <Maximum>)
```

#### Parameter

<table><thead><tr><th>Parameter</th><th>Typ</th><th>Beschreibung</th></tr></thead><tbody><tr><td>Wert</td><td>numerisch</td><td>Zu prüfender Wert</td></tr><tr><td>Minimum</td><td>numerisch</td><td>Kleinster erlaubter Wert</td></tr><tr><td>Maximum</td><td>numerisch</td><td>Größter erlaubter Wert</td></tr></tbody></table>

#### Rückgabewert

Gleicher Datentyp wie die Eingabewerte.

#### Beispiel

```powershell
[Math]::Clamp(120,0,100)
[Math]::Clamp(-5,0,100)
[Math]::Clamp(50,0,100)
```

Ausgabe

```text
100
0
50
```

</details><details id="bkmrk-ceiling%28%29-ceiling-di"><summary>Ceiling()</summary>

### **Ceiling()**

Die Methode **Ceiling()** rundet eine Zahl **immer auf die nächstgrößere ganze Zahl auf**. Besitzt die Zahl bereits keinen Nachkommateil, bleibt sie unverändert.

#### Syntax

```powershell
[Math]::Ceiling(<Zahl>)
```

#### Parameter

<div class="TyagGW_tableContainer"><div class="group TyagGW_tableWrapper flex flex-col-reverse w-fit" tabindex="-1"><table class="w-fit min-w-(--thread-content-width)"><thead><tr><th class="last:pe-10">Parameter</th><th class="last:pe-10">Typ</th><th class="last:pe-10">Beschreibung</th></tr></thead><tbody><tr><td>Zahl</td><td>Double / Decimal</td><td>Die aufzurundende Zahl.</td></tr></tbody></table>

</div></div>#### Rückgabewert

**Double** bzw. **Decimal**

Die aufgerundete ganze Zahl.

#### Beispiel

```powershell
[Math]::Ceiling(4.2)
[Math]::Ceiling(-4.2)
```

Ausgabe

```powershell
5
-4
```

</details><details id="bkmrk-floor%28%29-floor%28%29-besc"><summary>Floor()</summary>

### **Floor()**

Die Methode **Floor()** rundet eine Zahl **immer auf die nächstkleinere ganze Zahl ab**.

#### Syntax

```powershell
[Math]::Floor(<Zahl>)
```

#### Parameter

<table><thead><tr><th>Parameter</th><th>Typ</th><th>Beschreibung</th></tr></thead><tbody><tr><td>Zahl</td><td>Double / Decimal</td><td>Die abzurundende Zahl.</td></tr></tbody></table>

#### Rückgabewert

**Double** bzw. **Decimal**

Die abgerundete ganze Zahl.

#### Beispiel

```powershell
[Math]::Floor(4.9)
[Math]::Floor(-4.2)
```

Ausgabe

```text
4
-5
```

</details><details id="bkmrk-min%28%29-min%28%29-beschrei"><summary>Min()</summary>

### **Min()**

Die Methode **Min()** gibt den kleineren von zwei Werten zurück.

#### Syntax

```powershell
[Math]::Min(<Wert1>, <Wert2>)
```

#### Parameter

<table><thead><tr><th>Parameter</th><th>Typ</th><th>Beschreibung</th></tr></thead><tbody><tr><td>Wert1</td><td>numerisch</td><td>Erster Vergleichswert</td></tr><tr><td>Wert2</td><td>numerisch</td><td>Zweiter Vergleichswert</td></tr></tbody></table>

#### Rückgabewert

Gleicher Datentyp wie die Eingabewerte.

#### Beispiel

```powershell
[Math]::Min(12,8)
```

Ausgabe

```text
8
```

</details><details id="bkmrk-gr%C3%B6%C3%9Feren-wert-bestim"><summary>Max()</summary>

### **Max()**

Den größeren Wert bestimmen

```powershell
[Math]::Max(15,42)
```

Ausgabe

```
42
```

</details><details id="bkmrk-potenz-potenz-%5Bmath%5D"><summary>Pow()</summary>

### **Pow()**

Berechnet Potenzen

```powershell
[Math]::Pow(5,3)
```

Ausgabe

```
125
```

</details><details id="bkmrk-runden-runden-%5Bmath%5D"><summary>Round()</summary>

### **Round()**

Rundet Zahlen

```powershell
[Math]::Round(3.14159,2)
```

Ausgabe

```
3.14
```

</details><details id="bkmrk-sign%28%29-sign%28%29-beschr"><summary>Sign()</summary>

### **Sign()**

#### Beschreibung

Die Methode **Sign()** bestimmt das Vorzeichen einer Zahl.


#### Syntax

```powershell
[Math]::Sign(<Zahl>)
```

#### Parameter

<table><thead><tr><th>Parameter</th><th>Typ</th><th>Beschreibung</th></tr></thead><tbody><tr><td>Zahl</td><td>numerisch</td><td>Zu prüfende Zahl</td></tr></tbody></table>

#### Rückgabewert

**Rückgabetyp**: `System.Int32`

<table><thead><tr><th>Rückgabe</th><th>Bedeutung</th></tr></thead><tbody><tr><td>-1</td><td>Zahl ist negativ</td></tr><tr><td>0</td><td>Zahl ist 0</td></tr><tr><td>1</td><td>Zahl ist positiv</td></tr></tbody></table>

#### Beispiel

```powershell
[Math]::Sign(-20)
[Math]::Sign(0)
[Math]::Sign(20)
```

Ausgabe

```text
-1
0
1
```

</details><details id="bkmrk-quadratwurzel-quadra"><summary>Sqrt()</summary>

### **Sqrt()**

Berechnet Quadratwurzeln

```powershell
[Math]::Sqrt(64)
```

Ausgabe

```
8
```

</details><details id="bkmrk-truncate%28%29-truncate%28"><summary>Truncate()</summary>

### **Truncate()**

Die Methode **Truncate()** entfernt den Nachkommateil einer Zahl, ohne zu runden.

#### Syntax

```powershell
[Math]::Truncate(<Zahl>)
```

#### Parameter

<table><thead><tr><th>Parameter</th><th>Typ</th><th>Beschreibung</th></tr></thead><tbody><tr><td>Zahl</td><td>Double / Decimal</td><td>Zu kürzende Zahl</td></tr></tbody></table>

#### Rückgabewert

**Double** bzw. **Decimal**

Die Zahl ohne Nachkommastellen.

#### Beispiel

```powershell
[Math]::Truncate(4.9)
[Math]::Truncate(-4.9)
```

Ausgabe

```text
4
-4
```

</details>---

## **Weitere Details**

### Häufige Einsatzgebiete

Die Klasse `Math` wird häufig verwendet für:

- mathematische Berechnungen
- Koordinaten- und Geometrieberechnungen
- Diagramme und Visualisierungen
- Spieleentwicklung
- Größen- und Positionsberechnungen
- statistische Auswertungen
- wissenschaftliche Berechnungen

---

### Hinweise

- Alle Methoden sind **statisch**.
- Die Klasse kann nicht instanziiert werden.
- Für viele Methoden existieren mehrere Überladungen, die unterschiedliche numerische Datentypen unterstützen (`Int32`, `Double`, `Decimal` usw.).
- Die meisten Berechnungen arbeiten mit dem Datentyp `Double`, wodurch Rundungsungenauigkeiten bei Gleitkommazahlen auftreten können.

---

### Siehe auch

- `System.Random`
- `System.Convert`
- `System.Decimal`
- `System.Numerics`

# IO

# DirectoryInfo

Beinhaltet Informationen über einen Ordner

# CIM/WIM-Klasse

# Win32_CDROMDrive

`Win32_CDROMDrive` ist eine WMI/CIM-Klasse, die Windows nach vorhandenen optischen Laufwerken abfragt.

## Syntax
```powershell
Get-CimInstance Win32_CDROMDrive
```

**Beispiel**
```powershell
Caption         Drive Manufacturer                VolumeName
-------         ----- ------------                ----------
ASUS DRW-24D5MT D:    (Standard-CD-ROM-Laufwerke)
```

|  Caption               | Drive              | Manufacturer | VolumeName                        |
| -----------------------| ------------------ | ------------ | --------------------------------- |
| Bezeichnung des Geräts | Laufwerksbuchstabe | Hersteller   | Name des eingelegten Datenträgers |

---

## Eigenschaften

#### CapabilityDescriptions

Optionen des Laufwerks

#### Caption

Modellbezeichnung

#### Drive

Laufwerksbuchstabe

#### Manufacturer

Name des Herstellers, wenn keins vorhanden ist, wird in Klammern der generische Windows-Treiber genannt

#### Media Loaded

Angabe ob ein Medium eingelegt ist oder nicht

#### MediaType

Der Typ vom Laufwerk

| `MediaType`  | Bedeutung                                     |
| ------------ | --------------------------------------------- |
| `Unknown`    | Windows kann den Laufwerkstyp nicht bestimmen |
| `CD-ROM`     | CD-Laufwerk, nur Lesen                        |
| `CD-R`       | CD-R-Laufwerk                                 |
| `CD-RW`      | CD-RW-fähiges Laufwerk                        |
| `DVD-ROM`    | DVD-Laufwerk, nur Lesen                       |
| `DVD-R`      | DVD-R-fähiges Laufwerk                        |
| `DVD-RAM`    | DVD-RAM-fähiges Laufwerk                      |
| `DVD-RW`     | DVD-RW-fähiges Laufwerk                       |
| `DVD+R`      | DVD+R-fähiges Laufwerk                        |
| `DVD+RW`     | DVD+RW-fähiges Laufwerk                       |
| `DVD Writer` | DVD-Brenner                                   |
| `HD-DVD-ROM` | HD-DVD-Laufwerk                               |
| `HD-DVD-R`   | HD-DVD-Brenner                                |
| `HD-DVD-RW`  | HD-DVD-RW-fähig                               |
| `BD-ROM`     | Blu-ray-Laufwerk, nur Lesen                   |
| `BD-R`       | Blu-ray-Brenner für BD-R                      |
| `BD-RE`      | Blu-ray-Brenner für BD-RE                     |

#### Name

Modell-/Gerätename

#### PNPDeviceID

Hardwareerkennung

#### VolumeName

Name des eingelegten Datenträgers