Skip to main content

Powershell Befehle

Befehlsübericht

ComandletBeschreibung
Get-commandZeigt alle Befehle an
get-hostZeigt die Version von Powershell an
Get-Computerinfo Gibt die Computerinfo wieder
Get-ContentDamit kann eine Datei ausgelesen werden Beispiel: Get-Content C:\Users\XY\text.txt
Get-ChildItemOrdner Anzeigen
clear-hostBildschirm leeren
Write-hostPrint Befehl
Read-hostBenutzereingabe in der Konsole
Set-LocationÄndert das Verzeichnis von Powershell
Start-TranscriptAufzeichnen der Powershell
Start-SleepZeit warten
Get-PSDriveZeigt alle zur verfügungstehenden Laufwerke an
Get-NetIPConfigurationZeigt Netzwerkkarte an
Get-HelpZeigt die Hilfe zu einem Cmdlet an Beispiel: Get-Help Test-Connection auführlich: -detailed
Get-Help x -OnlineZeigt die Umfangreichere Onlinehilfe an Beispiel: Get-Help Test-Connection -Online
Test-ConnectionPing ausführen, kann mehrere Pings gleichzeitig ausführen Beispiel: Test-Connection orf.at,8.8.8.8 -Count 1 -Quiet
Test-NetConnectionBeipiel: Test-NetConnection 25.25.15.3 -TraceRoute Macht einen Ping auf ein Gerät. - TraceRoute gibt den Weg zurück
TracertGenauere TraceRoute
Req query Auslesen von Registry Eintragen
Remove-ItemDatei löschen
Psexec Remotezugriff Ausführen eines Befehls auf einem Remoterechner
Copy-itemBeispiel: Copy-Item -Path Pfad+Datei -Destination Zielpfad
CSV https://techexpert.tips/powershell/powershell-read-lines-from-csv-file/
Get-HotfixZeigt die letzten Windowsupdates an

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.

# Anzeigen 
Get-ExecutionPolicy -List

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

Vergleichsoperatoren

BefehlBeschreibung
-eqgleich
-neungleich
-ltkleiner
-lekleiner oder gleich
-gtgrößer
-gegrößer oder gleich

Parameterbeschreibung

-WhatIfZeigt was geschehen würde wenn…
-ConfirmFordert zur Bestätigung auf
-VerboseZeigt an was gerade geschieht

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

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

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

$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

# 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

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

Out-CMDlets

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

# 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

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

Get-Process | Sort-Object 

Select-Object

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

$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

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

Dateien

202205-PowerShell-Wiederholungsfragen.pdf

Alle Dateien


Als Administrator starten

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

Welche Powershell version

$PSVersionTable

Commandlet

Befehle



Beispiel
Get-ProcessTaskmanger
Get-Command
Get-Command -Verb Install
Get-Help Get-ChildItem -OnlineZeigt die Onlinehilfe an. Was aber bei uns meistens nicht funktioniert
Get-ChildItemInhalt eines Ordner anzeigen
where-ObjectZum Filtern von Ergebnissen-Filterscript {$_.handles -gt 1000}
Select-ObjectHier kann man sich bestimmte Parameter anzeigen lassenSelect-Object CsName, OsNmae, OsInstallDate
Format-Table

Get-MemberGibt eigenschaft wieder
Get-NetIPConfigurationHier kann auf die ergebnisse wie auf ein Array zugegriffen werden
Format-ListDamit kann man ausgegebene Listen formatieren

>> mit den beiden Pfeilen kann man an eine Datei anhängen

Get-Content .\myfile.txt -Wait-Wait Wenn man live zusehen will, wie zum Beispiel eine Textdatei angepasst wird
Export-CsvAls CSV ausgeben
Import-Csv

Export-ClixmlAls XML exportierenDadurch werden nicht alle daten in einen String umgewandelt wie bei CSV
Add-ComputerComputer zu einer Domain hinzufügenFür Remote muss man Credential angeben weil man sich sonst nicht anmelden kann.
$cred = Get-CredentialDamit kann man Benutzername und Passwort eingeben
$cred = New-Object -TypeName pscredential -ArgumentList 'Administrator',(ConvertTo-SecureString -String 'Pa$$w0rd' -AsPlainText -Force)Damit kann man die Credentials direkt einspeichern, damit das nicht extra eingegeben werden muss.
Test-ComputerSecureChannel -RepairKann Computer-Clients in der Domain reparieren.Mal ausprobieren, wenn es hier probmele gibt. <br />Test-ComputerSecureChannel kann annzeigen ob der Computer einen Fehler hat.
1..31 bis 3eine Schleife die von 1 bis 3 zählt
(Get-Date).AddDays(4)Gibt das heutige Datum + 4 Tage aus
"{} {}" -f $Temperatur,$Bedeckung-f arbeitet wie .format()aus python
New-Item -Path \\rechner\C$\ -Name ScriptShare -ItemType DirectoryErstellt auf einem Rechner einen Ordner in C

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:

Get-Help name -Detailed

Weiteres zu Hilfen:

get-help about_if -ShowWindow #zeigt wie man if verwenden kann. 
Show-Command # Damit kann man Cmdlets erstellen

Umwandeln von Bite

Wert / 1GB # Gibt GB wieder


Variablen

$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

"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

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.

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

$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

Provider
Get-PSDriveZeigt alle Laufwerke an
New-PSDrive - Name Scriptshare -Root \\Lon-Srv\c$\ScriptShare -PSProvider FileSystemBindet das Laufwerk vom Server in die Powershell auf dem Client ein und man kann damit arbeiten.


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

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

isesteroids kann die ise erweitern

Skripte

Skripte Starten

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

Beispiele

<# 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

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

Bedingungen

if
# if

if ( $a -gt 50 ) {

    mach das 
}
else {

    mach jenes
}
Switch
# Switch

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

# Schleife abbrechen
break
return

Schleifen

For
# 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

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

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

Do while
$i = 1

do {
    $i 
    $i++
} while ( $i -le 10)
$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

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

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

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

# 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

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

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

$joboptions = New-ScheduledJObOpti

Udemy

Wiederholung Teil 1/3

Select-Object

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

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

().Count

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

Wert einer Property abrufen

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

(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

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)

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