# Powershell Befehle

## Befehlsübericht

<table id="bkmrk-comandlet-beschreibu"><thead><tr><th>Comandlet</th><th>Beschreibung</th></tr></thead><tbody><tr><td>`Get-command`</td><td>Zeigt alle Befehle an</td></tr><tr><td>`get-host`</td><td>Zeigt die Version von Powershell an</td></tr><tr><td>`Get-Computerinfo  `</td><td>Gibt die Computerinfo wieder</td></tr><tr><td>`Get-Content`</td><td>Damit kann eine Datei ausgelesen werden Beispiel: Get-Content C:\\Users\\XY\\text.txt</td></tr><tr><td>`Get-ChildItem`</td><td>Ordner Anzeigen</td></tr><tr><td>`clear-host`</td><td>Bildschirm leeren</td></tr><tr><td>`Write-host`</td><td>Print Befehl</td></tr><tr><td>`Read-host`</td><td>Benutzereingabe in der Konsole</td></tr><tr><td>`Set-Location`</td><td>Ändert das Verzeichnis von Powershell</td></tr><tr><td>`Start-Transcript`</td><td>Aufzeichnen der Powershell</td></tr><tr><td>`Start-Sleep`</td><td>Zeit warten</td></tr><tr><td>`Get-PSDrive`</td><td>Zeigt alle zur verfügungstehenden Laufwerke an</td></tr><tr><td>`Get-NetIPConfiguration`</td><td>Zeigt Netzwerkkarte an</td></tr><tr><td>`Get-Help`</td><td>Zeigt die Hilfe zu einem Cmdlet an Beispiel: Get-Help Test-Connection auführlich: -detailed</td></tr><tr><td>`Get-Help x  -Online`</td><td>Zeigt die Umfangreichere Onlinehilfe an Beispiel: Get-Help Test-Connection -Online</td></tr><tr><td>`Test-Connection`</td><td>Ping ausführen, kann mehrere Pings gleichzeitig ausführen Beispiel: Test-Connection [orf.at](http://orf.at/),8.8.8.8 -Count 1 -Quiet</td></tr><tr><td>`Test-NetConnection`</td><td>Beipiel: Test-NetConnection 25.25.15.3 -TraceRoute Macht einen Ping auf ein Gerät. - TraceRoute gibt den Weg zurück</td></tr><tr><td>`Tracert`</td><td>Genauere TraceRoute</td></tr><tr><td>`Req query `</td><td>Auslesen von Registry Eintragen</td></tr><tr><td>`Remove-Item`</td><td>Datei löschen</td></tr><tr><td>`Psexec `</td><td>Remotezugriff Ausführen eines Befehls auf einem Remoterechner</td></tr><tr><td>`Copy-item`</td><td>Beispiel: Copy-Item -Path Pfad+Datei -Destination Zielpfad</td></tr><tr><td>`CSV `</td><td>[https://techexpert.tips/powershell/powershell-read-lines-from-csv-file/](https://techexpert.tips/powershell/powershell-read-lines-from-csv-file/)</td></tr><tr><td>`Get-Hotfix`</td><td>Zeigt die letzten Windowsupdates an</td></tr></tbody></table>

## Ausführungsrichtlinien

Um zu verhindern, dass ps1 Dateien unberechtigter weise ausgeführt werden können gibt es die ExecutionPolicy. Diese ist normalerweise undifined und damit können keine PS Dateien ausgeführt werden.

```powershell
# Anzeigen 
Get-ExecutionPolicy -List

# Ändern
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Bypass

```

## Vergleichsoperatoren

<table id="bkmrk-befehl-beschreibung-"><thead><tr><th>Befehl</th><th>Beschreibung</th></tr></thead><tbody><tr><td>-eq</td><td>gleich</td></tr><tr><td>-ne</td><td>ungleich</td></tr><tr><td>-lt</td><td>kleiner</td></tr><tr><td>-le</td><td>kleiner oder gleich</td></tr><tr><td>-gt</td><td>größer</td></tr><tr><td>-ge</td><td>größer oder gleich</td></tr></tbody></table>

## Parameterbeschreibung

<table id="bkmrk--whatif-zeigt-was-ge"><thead><tr><th>`-WhatIf`</th><th>Zeigt was geschehen würde wenn…</th></tr></thead><tbody><tr><td>`-Confirm`</td><td>Fordert zur Bestätigung auf</td></tr><tr><td>`-Verbose`</td><td>Zeigt an was gerade geschieht</td></tr></tbody></table>

### Weitere Befehle

Systeminformationen anzeigen

```
msinfo32

```

Computername anzeigen:

```
nslookup +ip-Adresse

```

Systeminformationen anzeigen:

```
Systeminfo

```

Gruppenrichtlinien als HTML ausgeben

```
gpresult /H datei.html

```

Gruppenrichtlinien manuell updaten

```
gpupdate /? 

```

Anpingen...

```
ping -a

```

Weg verfolgen zu einem Rechner

```
tracert

```

## Code-Beispiele

### Liste von ip-Adressen anpingen

```

1..255 | ForEach { Write-Host 169.254.66.$_, "-", ([System.Net.NetworkInformation.Ping]::new().Send("169.254.66.$($_)")).Status}
    

```

### Remote einschalten

```powershell
Set-Service -ComputerName haeb2pc4 -Name WinRM -StartupType Automatic -Status Running
Invoke-Command -ComputerName haeb2pc4 -Scriptblock {
    Get-ComputerInfo # In dem Scriptblock kann alles eingegeben werden, was auch auf einem Lokalen Rechner verwendet werden kann
	}
Set-fService -ComputerName haeb2pc4 -Name WinRM -StartupType Manual

```

### Anmeldeinformationen speichern

```powershell
$credentials = Get-Credential
$credentials | Export-Clixml -Path "C:\Pfad\Zur\Datei\credentials.xml"
```

### Anmeldeinformationen abrufen

```powershell
$credentials = Import-Clixml -Path "C:\Pfad\Zur\Datei\credentials.xml"

```

### Netzlaufwerk verbinden

```powershell
$driveLetter = "Z"
$networkPath = "\\ServerName\SharedFolder"

net use $driveLetter: $networkPath /user:$($credentials.UserName) $($credentials.GetNetworkCredential().Password) 
```

**Trennen**

```powershell
$driveLetter = "Z:"
net use $driveLetter /delete
```

## CMDledts

- Get- Verben nehmen niemals Änderungen vor

### CMDlets erkunden

```
Start-Transcript #Logfile erzeugen
Set-Location HKLM:  #Wechselt in die Registry

## Parameter

- Whatif #zeigt was geschen würde wenn
- Confirm #Fordert zur Bestätigung auf
- Verbose Zeigt an was gerade geschiet

```

### Hilfen anzeigen

Um mit den Comandos besser zurecht zu kommen kann man sich die Hilfen dazu wie folgt anzeigen lassen:

`Get-Help Get-Date -ShowWindow`

Bei dem Befehl wird die Hilfe von Get-Date in einem neuen Fenster angezei

### Pipe

Die Pipe "|" lenkt das Ergebnis von der linken Seite an die rechte Seite weiter

### Get-Hotfix angepasst

```
Get-Hotfix 

```

### Foreach

```shell
$testrechner = "10.198.48.102","10.198.48.103"  # Erstellt ein Array mit zwei IP-Adressen

Foreach ($i in $testrechner)                    # Foreach Schleife die jedes Element in Testrechner durchgeht 
{ Test-Connection $i -Count 1 -Quiet }          # Führt einen Ping auf die Elemente aus dem Array aus

```

## Formatierung und Ausgabe

### Format Table

```powershell
# Ausgabe 
Get-Process -Name VSSVC

# Umleitung an Format-Table
Get-Process -Name VSSVC | Format-Table Id,ProcessName 

# Herausfinden wie Atribite heißen
Get-Process -Name VSSVC | Get-Member

```

### Format List

```powershell
Get-Process -Name VSSVC | Format-List ID,ProcessName

```

### Out-CMDlets

```powershell
Get-Command | Out-File C:\Temp\cmdlets.txt # Speichert die Commandos in eine Datei aus

# OUt-Gridview erstellt ein Grafisches Raster

Get-Process | Out-GridView -PassThru | Stop-Process # Damit kann ich ein Fenster erstellen und danach den Prozess beenden

```

## Variable $\_

($\_ und $PSItem ist das selbe)

Beinhaltet das aktuell von der Pipeline verarbeitet Objekt

```powershell
# Beispiel
Get-Process | Where-Object { $_.CPU -GT 10 } # Filtert nach Objekten die > 10 sind Bei jedem Durchlauf wird geschaut ob das Objekt was durch $_ zurückgegeben wird größer ist 

```

## Filtern

```powershell
Get-ADComputer -Filter 'enable -eq $false' | irgendwas
# Hier wird vor der Pipline schon gefilter. Dadurch wird das Programm viel schneller, da es nicht alle Computer in die Pipeline weiter gibt. 

```

### Sort-Object

```powershell
Get-Process | Sort-Object 

```

### Select-Object

```powershell
Get-Process | Sort-Object -Proberty XXX | Select-Object -Last 5 
# Mit Select-Object * kann man sich alles anzeigen lassen. 

# Spezilles Parameter aus einem Objekt am Beispiel Get-ComputerInfo 
Get-ComputerInfo | Select-Object OsName, 

```

### Ping mit ExpandProberty

```powershell
$b = Get-ADComputer -Filter * | Select-Object -ExpandProperty Name 
# Dadurch wird der Wert abgerufen. Damit kann man weiter arbeiten, da es kein Objekt ist. 

Test-Connection $b

```

Zum Hauptinhalt springenZum Navigationsbereich der App springen

### Objekte und Klassen

Wie bei Python kann auch in Powershell eine Klasse erstellt werden. Hier ein Beispiel

```powershell
# Klassen

class Person {
    [string]$Name
    [int]$Age

    Person([string]$name, [int]$age) {
        $this.Name = $name
        $this.Age = $age
    }


    [void] SayHello() {
        Write-Host "Hello, my name is $($this.Name) and I am $($this.Age) Years old"
    
    }
}

$person = [Person]::new("John", 30)
$person.SayHello()
```


# Powershell Kurs für Administratoren und Udemy

## Schulungsunterlagen

> Willkommen bei Skillpipe!  
> Hallo Hermann Pelzer,  
> Mit Skillpipe kannst du deine Trainingsmaterialien jederzeit und überall auf deinem Lieblingsgerät aufrufen. Dein Lernfortschritt, die Markierungen, Notizen und Lesezeichen werden automatisch auf all deinen Geräten synchronisiert.  
> [Zugriff auf Skillpipe](https://www.skillpipe.com/?lang=de-DE)

### Dateien

[202205-PowerShell-Wiederholungsfragen.pdf](https://nc.hhml.selfhost.co/index.php/apps/notes/Dateien/Schulungen/Schulung%20Powershell/202205-Powershell-Wiederholungsfragen.pdf)

[Alle Dateien](https://nc.hhml.selfhost.co/index.php/apps/notes/Dateien/Schulungen/Schulung%20Powershell/)

---

Als Administrator starten

Verknüpfung bearbeiten und dort auswählen die Powershell als Administrator zu starten

### Welche Powershell version

`$PSVersionTable`

Commandlet

## Befehle

<table id="bkmrk-beispiel-get-process"><thead><tr><th>  
</th><th>  
</th><th>Beispiel</th></tr></thead><tbody><tr><td>Get-Process</td><td>Taskmanger</td><td>  
</td></tr><tr><td>Get-Command</td><td>  
</td><td>Get-Command -Verb Install</td></tr><tr><td>Get-Help Get-ChildItem -Online</td><td>Zeigt die Onlinehilfe an. Was aber bei uns meistens nicht funktioniert</td><td>  
</td></tr><tr><td>Get-ChildItem</td><td>Inhalt eines Ordner anzeigen</td><td>  
</td></tr><tr><td>where-Object</td><td>Zum Filtern von Ergebnissen</td><td>`-Filterscript {$_.handles -gt 1000}`</td></tr><tr><td>[Select-Object](https://nc.hhml.selfhost.co/index.php/apps/notes/note/36972#select-object)</td><td>Hier kann man sich bestimmte Parameter anzeigen lassen</td><td>`Select-Object CsName, OsNmae, OsInstallDate`</td></tr><tr><td>[Format-Table](https://nc.hhml.selfhost.co/index.php/apps/notes/note/36972#select-object)</td><td>  
</td><td>  
</td></tr><tr><td>Get-Member</td><td>Gibt eigenschaft wieder</td><td>  
</td></tr><tr><td>Get-NetIPConfiguration</td><td>Hier kann auf die ergebnisse wie auf ein Array zugegriffen werden</td><td>  
</td></tr><tr><td>Format-List</td><td>Damit kann man ausgegebene Listen formatieren</td><td>  
</td></tr><tr><td>  
</td><td>`>>` mit den beiden Pfeilen kann man an eine Datei anhängen</td><td>  
</td></tr><tr><td>  
</td><td>`Get-Content .\myfile.txt -Wait`</td><td>-Wait Wenn man live zusehen will, wie zum Beispiel eine Textdatei angepasst wird</td></tr><tr><td>`Export-Csv`</td><td>Als CSV ausgeben</td><td>  
</td></tr><tr><td>`Import-Csv`</td><td>  
</td><td>  
</td></tr><tr><td>`Export-Clixml`</td><td>Als XML exportieren</td><td>Dadurch werden nicht alle daten in einen String umgewandelt wie bei CSV</td></tr><tr><td>`Add-Computer`</td><td>Computer zu einer Domain hinzufügen</td><td>Für Remote muss man Credential angeben weil man sich sonst nicht anmelden kann.</td></tr><tr><td>`$cred = Get-Credential`</td><td>Damit kann man Benutzername und Passwort eingeben</td><td>  
</td></tr><tr><td>`$cred = New-Object -TypeName pscredential -ArgumentList 'Administrator',(ConvertTo-SecureString -String 'Pa$$w0rd' -AsPlainText -Force)`</td><td>Damit kann man die Credentials direkt einspeichern, damit das nicht extra eingegeben werden muss.</td><td>  
</td></tr><tr><td>`Test-ComputerSecureChannel -Repair`</td><td>Kann Computer-Clients in der Domain reparieren.</td><td>Mal ausprobieren, wenn es hier probmele gibt. &lt;br /&gt;Test-ComputerSecureChannel kann annzeigen ob der Computer einen Fehler hat.</td></tr><tr><td>`1..3`</td><td>1 bis 3</td><td>eine Schleife die von 1 bis 3 zählt</td></tr><tr><td>`(Get-Date).AddDays(4)`</td><td>Gibt das heutige Datum + 4 Tage aus</td><td>  
</td></tr><tr><td>`"{} {}" -f $Temperatur,$Bedeckung`</td><td>-f arbeitet wie `.format()`aus python</td><td>  
</td></tr><tr><td>`New-Item -Path \\rechner\C$\ -Name ScriptShare -ItemType Directory`</td><td>Erstellt auf einem Rechner einen Ordner in C</td><td>  
</td></tr></tbody></table>

---

## Notizen

Cmdlets bestehen immer aus Verb-Noun

Get bekomme etwas

Set etwas verändern

new um was neues zu erstellen

> Tipp: Mit Strg + Leertaste kann man sich alle Befehle anzeigen lassen

aliase: Andere Schreibweise für befehle. Machen dann aber das gleich wie das original

Wildcards \* oder ? wobei Fragezeichen nur ein Zeichen ersetzt

Hilfe Updaten: Update-Help

Hilfe ausfühlricher:

```powershell
Get-Help name -Detailed

```

Weiteres zu Hilfen:

```powershell
get-help about_if -ShowWindow #zeigt wie man if verwenden kann. 

```

```powershell
Show-Command # Damit kann man Cmdlets erstellen

```

### Umwandeln von Bite

`Wert / 1GB` # Gibt GB wieder

---

## Variablen

```powershell
$a = 100 # Variablen deklarieren

#Variable auslesen 
$a

Get-Variable # Zeigt alle bestehenden Variablen an

# Arrays
# Leeres Array erstellen: 
$myprocesses = @()

# Hashtables (=Dictionary)
$myHT = @{ Marke='Audi'; kw=140; Coupe=$false }
# Abfrage der Werte: 
$myTH.Marke

```

Man kann auch Variablen innerhalb einer Zeichenkette mit Anführungsstriche direkt verwenden

```powershell
"das ist ein Text mit $variable"

# Hashtablewerte in einen String übergeben
"Das ist ein Text mit einem Value $($wetter.temperatur)"

```

Skript muss immer in geschweiften Klammern sein

```powershell
Get-Service | Where-Object -FilterScript { $_.Name -like 'x*' }

```

Filtert das Service auf Objekte die mit X beginnen

### Aus einem Computer einen DomainController machen

Man muss erst mal die Tools installiert werden, damit ein Rechner als DomainController arbeiten kann.

```powershell
Get-WindowsFeature # Listet auf welche Features der PC hat

# Das ist nur auf einem Server möglich
Install-WindowsFeature -Name AD-Domain-Services -IncludeAllSubfeatures -IncludeManagementTools

```

### Datum verwenden

```powershell
$myDate = Get-Date -Year 2021 -Month 5 -Day 25
$myDate.Date # Uhrzeit wird nicht betrachtet
| where-Object { $_.lastwritetime.D -eq $myDate } # Filtern zum 25.05.

```

### Provider

Sind Programme, die auf andere Programme zugreifen

`Get-PSProvider`

<table id="bkmrk-provider-get-psdrive"><thead><tr><th>Provider</th><th>  
</th></tr></thead><tbody><tr><td>Get-PSDrive</td><td>Zeigt alle Laufwerke an</td></tr><tr><td>`New-PSDrive - Name Scriptshare -Root \\Lon-Srv\c$\ScriptShare -PSProvider FileSystem`</td><td>Bindet das Laufwerk vom Server in die Powershell auf dem Client ein und man kann damit arbeiten.</td></tr><tr><td>  
</td><td>  
</td></tr></tbody></table>

### Spezielle Variable:

$env: - Damit kann man auf Variablen und auf Computereigenschaften zugreifen

### WMI

> Windows Management Instrumentation:

Cimclass

WQL ist die Sprache für WMI

### Registry Editor

HKEY\_Current\_User: Einstellungen die der User macht  
HKEY\_Local\_Machine: Einstellungen der Machine für alle User

```powershell
cd hkcu #Wechsel ins Regestry Laufwerk

Get-Childitem #listet alle Schlüssel auf

#Neues Element in Software erstellen
cd .\Software\
New-Item -Name Az040 -Path . -ItemType Key
cd .\Az040\
New-ItemProberty -Path . -Name TlnAnzahl -Value 6 -ProbertyType dword
Set-ItemProberty -Path . -Name TlnAnzahl -Value 7 #Erstellt keinen neuen Wert kann aber einen vorhandenen bearbeiten
(Get-ItemProberty -Path .).Level # gibt den value von level wieder

```

mit sapien kann man aus ps1 auch exe machen kostet aber geld

[Sapien Editor](https://nc.hhml.selfhost.co/index.php/apps/notes/note/www.sapien.com/software/powershell-studio)

[isesteroids kann die ise erweitern](https://powershell.one/isesteroids/quickstart/overview)

### Skripte

> Skripte Starten
> 
> - Pfad angeben um das Skript zu starten
> - Ausführungsrichtlinie kann verhindern, dass ein Skript gestartet wird 
>     - Get-ExecutionPolicy -List
>     - Get-ExecutionPolicy &gt; Restricted
>     - mit Bypass wird die Policy nicht überprüft

#### Beispiele

```powershell
<# Mehrzeilige Kommentare
geht so. 
ziemlich einfach#> 
hostname

#region Region
mit dem region kann man bereiche ausklappbar machen fuer bessere uebersicht
#endregion 

# Um einen Parameter bei starten eines Skripts abzufragen
param (
    $status
)

```

#### Parameter in Skript übergeben

```powershell
# Verpflichtende Parameter
param ( 
    [parameter(Manatory=$true, Helpmessage='Bitte Parameter eingeben')]
    [validateSet('Running','Stopped')] #Welche werte sind erlaubt
    $status
)

```

#### Bedingungen

##### if

```powershell
# if

if ( $a -gt 50 ) {

    mach das 
}
else {

    mach jenes
}

```

##### Switch

```powershell
# Switch

Switch ($color) {
    'Yellow'{
        'Die Farbe ist gelb'
    }
    default {
        "Die Farbe ist unbekannt"
    }
}

# Schleife abbrechen
break
return

```

#### Schleifen

##### For

```powershell
# for ( $zähler; Endbedingung; Schrittweite)

for ( $i = 1; $i -le 5; $i = $i +1 ) {
    "Der Zähler hat den Wert $i"
}

```

##### foreach

> Hilfreich bei Arrays zu bearbeiten

```powershell
$colors = 'White', 'Yellow', 'Magenta', 'Cyan', 'Darkgray'

foreach ($temp in $colors) {
    write-Host "Rainbow" - ForgroundColor $temp
}


```

##### Do while

```powershell
$i = 1

do {
    $i 
    $i++
} while ( $i -le 10)

```

```powershell
$Kapital = 1000
$Zinssatz = 0.01
$Jahre = 0

$Endkapital = 1500

do {
    $Kapital = $Kapital * $Zinssatz + $Kapital
    $Jahre++
} while ($Kapital -le $Endkapital)

"Das Kapital muss $Jahre Jahre angelegt werden"

```

### Fehlerbehandlung

`Set-StrictMode -Version latest` dann werden mehr Fehler angezeigt

```powershell
try {
$b = Read-Host "Bitte einen Wert eingeben: "
}
catch{
    "Ui, ein Fehler ist aufgetreten"
    return # Mit return kann man das Scipt direkt abbrechen. Gibt man noch eine Zahl mit, dann kann man einen Fehlercode mitgeben
}

```

Bei Cmdlets muss man die -ErrorAction auf Stop setzen um bei einem Try eine Fehlermeldung zu bekommen

modul 4,5,7

### Remoting

```powershell
Enable-PSRemoting

Get-PSSessionConfiguration

#Verbinden mit Remote

Get-Process w* -ComputerName xxx #Zeigt Prozesse eines anderen Rechner an

# Methode um auf anderem Rechner Cmdlets auszuführen
Invoke-Command -Computername xxx -ScriptBlock { Get-Process w* }

# Skript auf einem anderem Rechner ausführen 
Invoke-Command -Computername xxx -FilePath C:\Script01.ps1

# Lokale Variablen werden über den Skriptblock nicht übergeben außer mit using
-ScriptBlock { Get-Service | Where-Object { $_.status -eq $using:status} | Select-Object -First 5 }

# Dauerhafte verbindung zu einem Rechner
$dc1Session = New-PSSession -Computername xxx

Invoke-Command -Session $dc1Session -Skriptblock { .. }

```

### Invoke-Command Info

Kann nur ausgeführt werden wenn WinRM läuft

```powershell
Get-Service -ComputerName xxx -Name WinRM # Nachschauen ob WinRm in Running ist 

# WinRM starten und Automatisch beim h
Set-Service -Name WinRM -CumputerName xxx -StartupType Automatic -Status Running 

```

### Funktionen

Speichern unter als ps1 Datei oder besser .psm1

```powershell
# Modul erstellen 
function Write-Hello {
    $Get-Corp
    return
} 

# Modul öffnen
Write-Hello

# Module Anzeigen
Get-Module -Listavailable -Name XXX -Refresh

```

Pfad zu Dokumenten:

`$env:PSModulpath`

### Hintergrund Aktionen

```powershell
Start-Job -name MyFirstJob -ScriptBlock { Get-ChildItem 'C:\Program Filse\' -Recurse}

# Aufrufen des Jobs: 
Get-Job 

# Ausgabe des Jobs: 
Receive-Job -Job (Get-Job -Id 2) #Wird neu ein einziges mal angezeigt. Besser speichern

# Man kann auch den Parameter -asjob verwenden
-asjob

# Warten bis alle Jobs erledigt sind: 
Get-Job | Wait-Job 

```

### Automatische Jobs

```powershell
$jobtrigger = New-JobTrigger -At (get-ate).AddMinutes(1) -Once 

$joboptions = New-ScheduledJObOpti

```

## Udemy

### Wiederholung Teil 1/3

#### Select-Object

```powershell
Get-ComputerInfo | 
Select-Object `
CsName, OsName, OsInstallDate, OsLastbootUptime |
Format-Table -AutoSize -Wrap # Macht ggf. Zeilenumbruch

```

### Attribute

Alle Attribute auflisten

`Get-Disk | Get-Member  # Zeigt alle Attribute von Get-Disk an`

Mit Select-Object kann ich die Attribute greifen

```powershell
Get-Disk | Select-Object  -Property DiskNumber,BusType,FriendlyName

```

#### ().Count

```powershell
(Get-Content irgendwas.txt).count # Zählt alle Objekte

```

#### Wert einer Property abrufen

```powershell
Get-ADComputer -Filter * | Select-Object -ExpandProperty Name # Gibt den Wert von Property Name zurück

# Mann kann aber auch über die Methode aufrufen 
(Get-ADComputer -Filter*).Name

```

### Methoden

> Info: Erkunde mit Get-Member

Eine Methode auf aufrufen

```powershell
(Get-Date).AddDays(8) # Fügt dem Aktuellen Datum 8 Tage hinzu 

```

Dem Unterschied zwischen Attribut und Methode kann man schon während der Eingabe sehen

### Beispiele

```powershell
Get-Disk | Get-Member

# Alles Anzeigen
Get-Disk | Select-Object * 

# Gezielt Attribute Abrufen 
Get-Disk | 
Select-Object -Property `
DiskNumber,BusType,FriendlyName,NomberOfPartisions,Firm

```

### Array

Ein Array erzeugen (Liste)

```powershell
$array = [array]('Peter', 'Margit')
$array[1] # Gibt 
```