Hier sammle ich Powershell Befehle (cmdlet) die ich sehr nützlich finde.
Natürlich kann man über die Hilfe (get-help) jedes cmdlet herausfinden, aber manchmal ist eine Übersicht ganz praktisch
Der Aufbau ist immer gleich:
verb -- Nomen -- Parameter
(get -- Process -- id)
cmdlet, Funktionen und Parameter:
$PSVersionTable | Version |
$WhatIfPreference = $true | Simulationsmmodus |
update-help | Hilfedateien laden |
get-help get-date | hilfe anzeigen zu "get-date" |
get-help –name stop | zeigt alle cmdlets und Functionen mit stop im Befehl |
get-childithem -path c:\ -filter *.doc -recurse | sucht *.doc dateien im Pfad C:\ und darunter |
Get-ChildItem -Path Env:\COMPUTERNAME | zeigt den PC Namen |
Get-command *msc* | Zeigt alle Commandos mit Endung .msc |
-ErrorAction:SilentlyContinue | Parameter unterdückt Fehler |
| out-gridview | mit pipe angehängt an cmdlet wird ein ext. Fenster geöffnet |
Invoke-comand –scriptBlock {get-service} –computername testrechner |
|
start-process |
startet Notepad |
| select-object -property |
die pipe leitet die Ausgabe an den Filter (Select-object)--> mit dem Paramter -property kann die gewünschten Spaten auswählt werden (-proberty * zeigt alle Möglichkeiten) |
get-history | zeigt die Befehls History |
Get-ChildItem -path C:\WINDOWS\system32 | where extension -EQ .txt Get-ChildItem -path C:\WINDOWS\system32 -Filter *.txt |
--> filtert aus dem Ergebnis alle Dateien mit Endung .txt 1. Serverseitig (also langsam) aber universell ! 2.Auf der Client Seite (wenn das cmdlet den Parameter -Filter besitzt) |
Get-ChildItem -Path $env:windir -File | Where-Object Length -gt 1MB |
zeigt alle Dateien aus dem windir Verzeichnis die größer als 1MB sind -gt = größer ( greater than) -lt = kleiner (lower than) -eq = gleich (equal) ohne Vergleichsoperator wird nur angezeigt was vorhanden ist ! |
$Name=Read-Host 'Bitte Name eingeben: ' | Einfach Abfrage ( Fragt die Varaible $Name ab ) |
Export-WindowsDrivers -online -Destination d:\Drivers | Exportiert alle Treiber des aktuellen Systems nach d:\Drivers |
Get-ExecutionPolicy | Zeigt ob nur signierte Skripte (oder überhaupt Skripte) ausgeführt werden dürfen |
Set-ExecutionPolicy unrestricted | Erlaubt ausführung aller! Skripte |
Start-transcript -path c:\aufzeichnen.txt | zeichnet die aktuelle Powershell Sitzung auf |
pathping host | ähnlich Tracroute |
Reset-ComputerMachinePassword oder Test-ComputerSecureChannel -repair |
Repariert die Vertrauenstellung Computer/Domäne |
new-smbshare | erzeugt eine Netzwerkfreigabe |
get-appxPackage get-appxPackage |remove appxPackage get-appxPackage * |fl name get-appxProvisionPackage -online get-appxProvisionPackage -online | ? displayname -like *bing* |remove-AppxProvisonPackage -online |
Apps unter Win 10 anzeigen /entfernen |
Remote Arbeiten:
|
Powersehll für Remote freigeben: |
Invoke-comand –scriptBlock {get-service} –computername testrechner |
führt das cmdlet "get-service" auf dem Remotecomputer(testrechner) aus |
New-PSSesion -computername |
Startet eine neu Powershell Session auf einem Remote Computer |
wird fortgesetzt .....
Shorcuts im ISE:
STRG + F1 = suche nach cmdlets
STRG + R = zeigt den versteckt den Scriptbereich
Interessante Konsolen Befehle für die Powershell und klassiche cmd:
Devmgmt | öffnet den Gerätemanager |
Control | öffnet die Systemsteuerung |
Driverquery | zeigt alle Treiber |
Systeminfo | zeigt alle relevanten Systeminfos (Info : Systeminfo /?) |
Systeminfo /s Testrechner | Info über Testrechenr anzeigen |
Explorer $Home | öffnet Explorer im Home Ordner |
Slmgr /dlv | zeigt Windows Lizenz Info an |
Tzutil /? | Zeitzone einstellen / auslesen |
Getmac /? | zeigt die Mac adresse |
cmd:
|
|
Winver |
aktuelle Windows Version wird angezeigt |
set |
zeigt Systemvariablen und den aktuell verwendeten Logon Server! (Domain Controller) |
ms |
|
msinfo32 |
zeigt, unter anderem, Umgebungsvariablen |
w32tm /monitor w32 /resysnc |
Uhrzet anzeigen neu synchronisieren mit DC |
wird fortgesetzt .....
ISE (Integrated Scripting Enviroment)
Wenn im ISE ein Skript gespeichert wird, ist es zunächst nicht ausführbar. Falls man es starten möchte bekommt man folgende Fehlermeldung:
Grund ist die Ausführungsrichtlinie ( Execution Policy) die bei neuen Systemen erst mal alle Skripte verbietet:
das kann man prüfen mit dem Powershell Befehl: Get-ExecutionPolicy -List
Powershell liest die Einstellungen von oben nach unten. Die erste die nicht Undefined lautet wird angewandt !
Um nun die Ausführung für den aktuellen User zu ermögllichen, benötige ich folgenden Befehl: Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned -Force
Anschließend sieht das ganze so aus:
Das bedeutet, alle lokalen (selbst erzeugte, oder Domänen eigene Skripte ) dürfen ausgeführt werden. Skripte aus dem Internet/email ... ohne gültige Signatur dürfen nicht ausgeführt werden.
Einsatz von Filter (bzw. Where-Object)
Where-Object = Filtert die Ergebnisse nach Kriterien
Beim Einsatz von |Where-Object können mithilfe von geschweiften Klammern auch mehrere Bedingungen (-lt = lower than; eq = equal ; -gt = greater than)mit logischen Operatoren -and, -or, -not in den Filter integriert werden.
z.B.: Suche im Verzeichnis c:\Test\ --> nach Dokumenten mit den Endungen *.txt und *.doc
Get-ChildItem -Path C:\test -File -ErrorAction SilentlyContinue | Where-Object {$_.Extension -eq '.doc' -or $_.Extension -eq '.txt' }
(***********************************************Anmerkung************************************
Für die Suche nach Endungen gibt es aber auch die Möglichkeit der Clientseitgen Filterung, die sehr viel schneller ist:
Get-ChildItem -Path C:\test -File -recurse -ErrorAction SilentlyContinue -Include *.txt,*.doc
********************************************************************************************)
Aufbau eines Filters Schritt für Schritt:
#Get-WmiObject Win32_NetworkAdapterConfiguration
-->Das cmdlet liefert alle Daten über die Netzwerkadapter:
#Get-WmiObject Win32_NetworkAdapterConfiguration | Where-Object IPAddress
-->zeigt nur noch Einträge mit IP Adresssen
#Get-WmiObject Win32_NetworkAdapterConfiguration | Where-Object IPAddress | Select-Object -ExpandProperty IPAddress
-->zeigt nur noch die IP Adressen an
#Get-WmiObject Win32_NetworkAdapterConfiguration | Where-Object IPAddress | Select-Object -ExpandProperty IPAddress | Where-Object { $_ -like '*:*' }
-->zeigt nur noch IP v6 Adressen an (Daten die einen Doppelpunkt entahlten)
Einsatz von Select-Object um das Ergebniss anzupassen
Select-Object = Gibt die Kontrolle, welche Spalten angezeigt werden
Unsichtbare Spalten anzeigen:
Mit Select-Object kann das Ergebnis gefiltert/angepasst werden, oder das Gegenteil, es kann alle Zeilen anzeigen:
z.B:
#get-wmiObject win32_bios
--> zeigt nur folgende Zeilen:
Wer alles sehen möchte fügt mit der Pipe folgenden Zusatz an:
#get-wmiObject win32_bios | select-object -property *
-->das Ergebniss ist sehr viel umfangreicher und zeigt alles mit den richtigen Spaltnamen an.
.....es gibt eine Flut an Informationen
Möchte ich jetzt aber nur einige Zeilen, z.B die IP Adressen anzeigen, kann ich mit SelectObject ganz bewusst nur die benötigten angeben:
#get-wmiObject win32_bios |select-object -property ipaddress
Genauso können Platzhalter verwendet werden ( |select-object *IP* ) zeigt alle Spalten in denen IP vorkommt.
Der Parameter -property ermöglicht die Auswahl weniger Spalten.
DerParameter -ExpandProperty ermöglicht die Auswahl einer Spalte mit allen Informationen
Schleifen
Ein Beispiel für eine einfache Schleife:
#1..10 | forEach-Object {"Zahl: $_"}
mit der Pipe werden nacheinander die Zahlen 1..10 an den Parameter -process übergeben.
Der Script Code in den gescheiften Klammern wird somit für jede vorhandene Zahl ausgeführt.
Die Variable: $_ enthält jeweils die aktuelle Zahl.
Kommen keine neuen Zahlen ist die Schleife zu Ende!
Powershell Remote:
Remote für Powershell aktivieren:
Get-NetConnectionProfile
set-entconnectionProfile -InterfaceIndex 4 -NetworkCategory Private
... ist noch in Arbeit