# Powershell-Beispiele zum Vortrag "Powershell ohne Emotionen" # Erstellt von Holger Voges # Netz-Weise IT-Schulungen # Freundallee 13a # 30173 Hannover # Teil 1: # Kompatibilität mit der Kommandozeile # ------------------------------------ # Die meisten Kommandozeilen-Befehle lassen sich auch direkt in der # Powershell ausführen. Dafür sind meist Aliase (Verweise auf die # entsprechenden Powershell-Befehle) oder Funktionen implementiert, # die die Kompatibilität herstellen Dir C:\Windows mkdir c:\Temp man ls # einfache Commandlets einsetzen # ------------------------------ # Viele Commandlets funktionieren durch Eingabe des Befehls ohne weitere # Optionen # Anzeigen der laufenden Prozesse ( = tasklist.exe) Get-Process # alle verfügbaren Befehle anzeigen get-command # und die Powershell-Hilfe aufrufen get-help # die Hilfe muß ab Powershell 3.0 erst einmal aktualisiert werden - dafür # werden Admin-Rechte benötigt Update-Help # Alle installierten Dienste und Ihren Status anzeigen Get-Service # Installierte Updates anzeigen Get-HotFix # Alle Windows-Treiber einsetzen - hier werden schon 2 Parameter eingesetzt Get-WindowsDriver -Online -all # Benötigt Hyper-V: Alle registrierten virtuellen Maschinen anzeigen get-vm # Die verfügbaren Netzwerk-Schnittstellen auflisten Get-NetIPInterface # Und alle IP-Adressen (ipV4 und ipV6) Get-NetIPAddress # Parameter einsetzen # ------------------- # Parameter übergeben dem Commandlet weitere Optionen. Parameter werden immer mit # einem - angegeben, wobei nicht alle Paramter ein Argument # haben, wie man an den obigen Beispielen (-online, -all) schon gesehen hat. # Es handelt sich dann um Schalter (ein/aus) bzw. Switch-Parameter # Virtuelle Festplatten verwalten # ------------------------------- # eine neue virtuelle Festplatte anlegen new-vhd -Path D:\Hyper-V\Festplatte.vhdx -50GB -Dynamic # eine Differenz-Datei zur neuen Festplatte anlegen new-vhd -Path D:\Hyper-V\Festplatte_diff.vhdx -ParentPath D:\D:\Hyper-V\Festplatte.vhdx # und schließlich die virtuelle Festplatte zur Verfügung stellen: Mount-vhd -Path D:\Hyper-V\restplatte_diff.vhdx # Arbeiten mit dem Active Directory # --------------------------------- # Abrufen aller User im AD Get-ADUser -filter * # Den Ort aller Benutzer auf "Hannover" setzen - verwendet die Pipeline # mehr zur Pipeline später Get-ADUser -filter * | Set-ADUser -city 'Hannover' # Mit Netzwerk-Schnittstellen und IP-Adressen arbeiten # Alle Netzwerk-Schnittstellen ausgeben, die keine Verbindung haben Get-NetIPInterface -ConnectionState Disconnected # Alle Netzwerkschnittstellen ausgeben, die DHCP-aktiviert sind Get-NetIPInterface -Dhcp Enabled # Die Netzwerkschnittstelle ausgeben, der Name 'Lan-Verbindung' lautet Get-NetIPInterface -InterfaceAlias 'Lan-Verbindung' # Alle ipV4-Adresse ausgeben Get-NetIPAddress -AddressFamily IPv4 # Die Fireall auf für alle Profile (Öffentlich,Privat,Domäne) deaktivieren Set-NetFirewallProfile -All -Enabled False # Arbeiten mti dem Eventlog # Aus dem Application-Log alle Fehler auflisten Get-EventLog -LogName Application -EntryType Error # und die Fehler ausgeben - verwendet die Pipeline Get-EventLog -LogName Application -EntryType Error | Out-GridView # Mit Umgebungsvariablen arbeiten # Über $env: greifen sie auf Umgebungsvariablen zu $env:COMPUTERNAME # Mit Pfaden arbeiten # Mit Test-Path könnenSie überprüfen, ob ein Pfad existiert. Test-Path liefert # true oder false zurück test-path C:\windows\notepad.exe # Mit -Pathtype Container oder -Pathtype Leaf können Sie festlegen, dass der # angegebene Pfad ein Ordner oder eine Leaf-Objekt sein soll. Wir reden hier von # Contain und Leaf, weil Test-Path auch z.B. mit der Registry funktioniert. test-path 'C:\Program Files\7-Zip' -PathType Container # Split-Path kann Pfade auftrennen split-path -Path C:\Windows\System32 -Parent split-path -Path C:\Windows\System32 -Leaf # Und join-path erstellt einen Pfad join-path -Path 'C:\Program Files' -ChildPath 'HolgerSoft' # Auf Objekteigenschaften zurückgreifen # ------------------------------------- # Wenn Sie auf die Eigenschaften der Objekte zurück greifen möchten, die Powershell # Ihnen liefert, stellen Sie entweder den Befehl in Klammern und geben die Eigenschaft # an, die Sie aufrufen wollen, um nur diesen einen Wert zurück zu geben: (Get-NetIPAddress -AddressFamily IPv4).IPAddress # Oder Sie verwenden die Pipeline - siehe nächstes Beispiel # Mit der Pipeline arbeiten # ------------------------- # Die Pipeline funktioniert ähnlich wie die Pipeline in der Windows-Kommandozeile oder # der Unix-Shell, ist aber ungleich leistungsfähiger, da Powershell mit Objekten und # nicht mit Text arbeitet. # Mit dem |-Zeichen wird die Ausgabe an das nächste Cmdlet zur Weiterverareitung weiter # gegeben # Alle virtuelle Maschinen stoppen get-vm | stop-VM # Alle Netzwerkprofile auf "private Netzwerk" umstellen Get-NetConnectionProfile | Set-NetConnectionProfile -NetworkCategory Private # ADUser bearbeiten - s. Beispiel oben Get-ADUser -Filter * | Set-ADUser -City 'Hannover' # Events in uns aus eine csv-Datei lesen Get-Eventlog -LogName System -EntryType Error,Warning -ComputerName Client1,Client2 | Export-CSV -Path C:\Temp\Errorlist.csv -Delimiter ';' Import-CSV -Path C:\temp\errorlist.csv | Out-GridView # Alle installierten modern Apps deinstallieren Get-AppxPackage | Remove-AppxPackage # Webseiten abrufen mit Invoke-Webrequest Invoke-WebRequest -Uri www.heise.de (Invoke-WebRequest -Uri www.heise.de).Links ((Invoke-WebRequest -Uri www.heise.de).Links).href