Technet Windows PowerShell
Windows PowerShell - Cmdlet-Hilfethemen
MS PowerShell Forum
Powershell AG Forum
ModulManagement der PowerShell
Ausführungsrichtlinien für PowershellScripte
Der Start der PowerShell erfolgt über das Startmenü unter Programme | Zubehör | Windows PowerShell | Windows PowerShell
oder Windows PowerShell ISE
, oder über Ausführen / Eingabeaufforderung
PowerShell ISE
kann ab Windows 8 / Server 2012 durch Rechtsklick auf das angeheftete Symbol in der TaskLeiste gestartet werden.
- normale PowerShell
powershell
- PowerShell ISE (Integrated Scripting Environment)
powershell_ise
- verfügbare Parameter anzeigen
powershell -?
- alle verfügbaren Module der PowerShell anzeigen
Get-Module -ListAvailable
- nur angegebene Module laden
Import-Module <Modulname>
Import-Module Servermanager
- alle verfügbaren Module der PowerShell laden
Get-Module -ListAvailable | Import-Module
Get-ExecutionPolicy
Set-ExecutionPolicy
- aktuelle Ausführungsrichtlinien anzeigen
Get-ExecutionPolicy -List Scope ExecutionPolicy ----- --------------- MachinePolicy Undefined UserPolicy Undefined Process Undefined CurrentUser Undefined LocalMachine RemoteSigned
- PowerShell-Skripts Ausführungsrichtlinien bearbeiten, wenn Scripte nicht ausgeführt werden dürfen. TN Artikel
Fehlermeldung: GetProductKey : Path zum Script\script.ps1" kann nicht geladen werden, da die Ausführung von Skripts auf diesem System deaktiviert ist. Weitere Informationen finden Sie unter "about_Execution_Policies"
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine
Standard Einstellung: Restricted
Set-ExecutionPolicy Restricted
ExecutionPolicy | Beschreibung |
---|---|
Unrestricted | (Uneingeschränkt) Alle Konfigurationsdateien werden geladen, und alle Skripts werden ausgeführt. Wenn Sie ein nicht signiertes Skript ausführen möchten, das aus dem Internet heruntergeladen wurde, werden Sie vor der Ausführung zur Genehmigung aufgefordert |
RemoteSigned | (Remote signiert) Heruntergeladene Skripts müssen von einem vertrauenswürdigen Autor signiert werden, bevor sie ausgeführt werden können |
AllSigned | (Vollständig signiert) Nur von einem vertrauenswürdigen Autor erstellte Skripts können ausgeführt werden |
Restricted | (Eingeschränkt) Es können keine Skripts ausgeführt werden. Windows PowerShell kann nur im interaktiven Modus genutzt werden |
Default | setzt die Einstellung auf Standard zurück (Restricted) |
Bypass | (Uneingeschränkt) Keine Blockierung findet statt, und es werden keine Warnungen oder Eingabeaufforderungen ausgegeben. |
Undefined | Entfernt die gerade zugewiesene Ausführungsrichtlinie aus dem aktuellen Bereich. Mit diesem Parameter wird keine Ausführungsrichtlinie entfernt, die in einem Gruppenrichtlinienbereich festgelegt wurde |
Befehl | Erklärung |
---|---|
help oder help <Befehl> | allgemeine Hilfe, Erläuterung zum angegebenen Befehl |
Get-Help oder Get-Help <Befehl> | allgemeine Hilfe, Erläuterung zum angegebenen Befehl |
Get-Help <Befehl> -ShowWindow | ab PS 3.0 - startet ein eigenständiges Hilfefenster |
Get-Help <Befehl> -Online | ab PS 3.0 - OnlineHilfe im Standardbrowser wird gestartet |
Update-Help | ab PS 3.0 - Hilfedateien werden Online aktualisiert, diese sind für die Standardmodule unter C:\Windows\System32\WindowsPowerShell (Aktualisierung nur mit Adminrechten möglich) |
get-help <Befehl> -examples | Beispiele des Befehls anzeigen |
Show-Command <Befehl> | ab PS 3.0 - Abfrage interaktiv zusammenstellen, Pflichtparameter mit * gekennzeichnet |
<Befehl1> | <Befehl2> | <Befehl3> | Befehle verbinden, die Ausgabe des ersten ist Eingabe für den zweiten Befehl usw. |
Get-Alias | ft -AutoSize | Liste der definierten Aliase |
Get-History | zeigt letzten 32 eingegebenen Befehle (Alias: History, ghy, h) |
Get-Host | Powershell Version anzeigen |
$PSVersionTable | Powershell Version anzeigen |
$Host.Version | Powershell Version anzeigen |
- detailierte Hilfe
Get-Help <Befehl> -Detailed
- detailierte Hilfe
Get-Help <Befehl> -examples
- Liste von Hilfsartikeln (bis PS 2.0)
Get-Help about_*
- Artikel über Aliase anzeigen (bis PS 2.0)
Get-Help about_aliases
es sind zahlreiche Aliase für CmdLets definiert, die Kompatibilität mit DOS und als Abkürzungen dienen
- Aliase anzeigen für einen Befehl, im Beispiel DIR
Get-Alias -name dir
Befehl | Erklärung |
---|---|
Format-List | Kurz: fl | Formatierte Liste |
Format-Table | Kurz: ft | Formatierte Tabelle |
Sort-Object | Kurz: sort | Sortierung aufsteigend |
Sort-Object <Object> -Descending | Kurz: sort <Object> -Desc | Sortierung absteigend |
Out-File | Ergebnis in eine Datei exportieren |
Out-Printer | Ergebnis an einen Drucker senden |
Ausgabe formatieren als Liste mit Format-List oder Tabelle mit Format-Table, Hilfe zeigt help fl oder help ft (fl und ft sind Aliase)
- es wird der Name und Größe ausgegeben, die Spaltengröße ist auf Auto gesetzt (AutoSize)
dir | ft name, Length -AutoSize
- Ausgabe sortiert (Sort), nach Größe (Length), absteigend (-Descending, Kurz: desc)
dir | Sort Length -Descending | ft name,Length -AutoSize
Befehl | Erklärung |
---|---|
Get-Process | Prozesse |
Get-Service | Dienste |
Get-Printer | Liste installierter Drucker |
Get-Printer | Get-PrintJob | Liste aller Druckjobs |
Get-Printer | Get-PrintJob | Remove-PrintJob | Druckaufträge aller Drucker löschen |
- Beispiel, alle Prozesse von calc beenden
Get-Process calc | Stop-Process
- Liste aller Prozesse sortiert nach WorkingSet (WS) absteigend (-Descending)
Get-Process | sort WorkingSet -Descending
- Liste aller gestoppten Systemdienste auf den angegebenen Drucker ausgeben
Get-Service | Where-Object Status -EQ stopped | Out-Printer -Name "FreePDF"
- Variable in einer PS-Sitzung definieren
$ip = '192.168.0.1'
- Variable aufrufen
echo $ip
Befehl | Erklärung |
---|---|
Get-NetworkConnectionInfo | PS 2.0 - Netzwerkeinstellungen |
Get-NetAdapterStatistics | ab PS 3.0 - Netzwerkstatistik |
New-SmbShare | ab PS 3.0 - neue Freigabe erstellen |
Grant-SmbShareAccess | ab PS 3.0 - Rechte auf Freigaben setzen |
Revoke-SmbShareAccess | ab PS 3.0 - Rechte von Freigaben entfernen |
Get-SmbShareAccess <Freigebe> | ab PS 3.0 - gesetzte Rechte anzeigen |
Get-SmbShare | ab PS 3.0 - Liste aller Freigeben |
Get-NetAdapter | ab PS 3.0 - Netzwerkadapter |
Get-NetAdapterBinding | ab PS 3.0 - Netzadapter Bindung |
Get-NetIPInterface | ab PS 3.0 - NetzwerkInterface |
New-NetIPAddress | ab PS 3.0 - IP-Adresse des Interface statisch setzen und Gateway zuweisen |
Get-NetIPAddress | ab PS 3.0 - IP-Adresse des Interface |
Set-NetIPAddress | ab PS 3.0 - IP-Adresse des Interface auf DHCP setzen |
Remove-NetIPAddress | ab PS 3.0 - IP-Adresse des Interface entfernen |
Get-NetRoute | ab PS 3.0 - Routen anzeigen |
Set-NetRoute | ab PS 3.0 - Routen setzen |
Remove-NetRoute | ab PS 3.0 - Routen löschen |
Get-DnsClientServerAddress | ab PS 3.0 - DNS Einstellungen anzeigen |
Set-DnsClientServerAddress | ab PS 3.0 - DNS Einstellungen ändern |
Clear-DnsClientCache | ab PS 3.0 - DNS Cache löschen |
Resolve-DnsName <domain.tld> | ab PS 3.0 - DNS Hostabfrage, wie nslookup |
- Netzwerkstatistik anzeigen
Get-NetAdapterStatistics -Name Ethernet | fl *
- Freigabe für den Ordner D:\Freigabe
erstellen, Zugriff Jeder nur lesen. (PowerShell muss als Admin ausgeführt sein)
mkdir D:\Freigabe New-SmbShare -Name Freigabe -Path D:\Freigabe ` -Description "eine Freigabe" ` -FullAccess Jeder ` -FolderEnumerationMode AccessBased
- Rechte der Benutzer der Freigabe C$ anzeigen
Get-SmbShareAccess c$ | ft -AutoSize
- alle Netzwerkadapter Infos anzeigen
Get-NetAdapter | fl
- Netzwerkadapter Bindungen anzeigen
Get-NetAdapterBinding -name Ethernet | ft -autosize
- IPv6 Bindung des LAN Adapters "Ethernet" deaktivieren.
Get-NetAdapterBinding -Name Ethernet ` -DisplayName *tcp/ipv6* | Disable-NetAdapterBinding
- Liste aller Einstellungen des Netzwerkinterfaces Ethernet
Get-NetIPInterface -InterfaceAlias "Ethernet" | fl
- IP-Adressen der angegebenen Schnittstelle anzeigen
Get-NetIPAddress -InterfaceAlias "Ethernet" | fl
- DNS Server für das angegebene Interface setzen, es können auch mehrere DNS Server angegeben werden
Set-DnsClientServerAddress -InterfaceAlias "Ethernet" -ServerAddresses 192.168.20.253
Set-DnsClientServerAddress -InterfaceAlias "Ethernet" ` -ServerAddresses 192.168.20.252, 192.168.20.253, 192.168.20.254
- DNS Server für das angegebene Interface entfernen
Set-DnsClientServerAddress -InterfaceAlias "Ethernet" -ResetServerAddresses
- Powershell starten (mit Systemmodule importieren) Windows Server-Sicherung installieren
Add-WindowsFeature -name backup, backup-tools
- über Powershell prüfen ob Windows Server-Sicherung installiert ist
Get-WindowsFeature -name backup, backup-tools
- alle installierten Windows Feature anzeigen
Import-Module Servermanager Get-WindowsFeature | where {$_.Installed -eq "True"} | ft DisplayName, Installed
- Liste aller verfügbaren Windows Feature, installierte und nicht installierte
Import-Module Servermanager Get-WindowsFeature | ft DisplayName, Name, Installed
- alle Computer der Domain anzeigen
Get-ADComputer -Filter *
- Version der VMs anzeigen
get-vm * | ft Name, Version
- Version der VM updaten von v5.0 (SRV 2012R2) auf v6.0 (SRV 10)
Update-VmConfigurationVersion <Name der VM>
- auf einem Core oder Nano Server die GUI Komponenten von CD nachinstallieren
Get-WindowsImage -ImagePath d:\sources\install.wim Install-WindowsFeature -Name Server-Gui-Shell,Server-Gui-Mgmt-Infra -Source wim:d:\sources\install.wim:2
- Variablen definieren, Powershell Remoteverbindung aufbauen, IP-Adressen konfigurieren und einer Domain beitreten.
$ip = <IP-Adresse des Servers> $cred = Get-Credential <IP-Adresse des Servers>\Administrator Set-Item WSMan:\localhost\Client\TrustedHosts $ip Enter-PSSession -ComputerName $ip -Credential $cred New-NetIPAddress -InterfaceIndex 3 -IPAddress 192.168.0.1 -PrefixLength 24 -DefaultGateway 192.168.0.254 Set-DnsClientServerAddress -InterfaceIndex 3 -ServerAddresses 192.168.0.254 Rename-Computer -NewName WinSRV2016 -Domainname domain.tld -Restart
Befehl | Erklärung |
---|---|
Get-VM | Liste aller VMs |
Get-VMProcessor -VMName <VM-Name> | fl | Einstellungen der VM |
ExposeVirtualizationExtensions= True
Nested Virtualisation einstellen (mind. 4GB RAM, kein Dynamic Memory)
Set-VMProcessor -VMName Test -ExposeVirtualizationExtensions $true
Befehl | Erklärung |
---|---|
New-AdUser | neuen Benutzer anlegen |
Get-AdUser | Benutzer anzeigen |
Set-ADuser | Angaben zum Benutzer ändern |
Remove-ADUser | Benutzer löschen |
- Benutzer in der Domain anlegen, alle neuen Benutzer bekommen das gleiche Passwort
############################################################### # UserAdd.ps1 ################### # Variablen ################### $Domain = "DC=domain,DC=zz" $eDomain = "@domain.zz" $Name = (Read-Host "BenutzerNamen bitte eingeben") $VorName = (Read-Host "Vorname bitte eingeben") $NachName = (Read-Host "Nachname bitte eingeben") ################### New-AdUser -name "$Name" -UserPrincipalName "$Name$eDomain" -Enable $True ` -AccountPassword (ConvertTo-SecureString 'Passwd' -AsPlainText -Force) ` -Givenname "$VorName" ` -Surname "$NachName" ` -DisplayName "$Name"
- Benutzer der Domain anzeigen
Get-AdUser -Filter *
- Benutzerdaten des angegebenen Benutzers anzeigen, alle User mit Anfangsbuchstaben R anzeigen.
Get-AdUser -f {Name -eq '<Username>'}
Get-AdUser -f {Name -like 'R*'}
- bestimmte Angaben zum Benutzer anzeigen
Get-ADUser -f {Name -like '*'} -Properties * | fl ` Name,UserPrincipalName,SamAccountName,Givenname,Surname,DisplayName
- Passwörter mehrerer User ändern (alle die mit U anfangen)
Get-ADUser -Filter {sAMAccountName -like "U*"} | Set-ADAccountPassword -Reset ` -NewPassword (ConvertTo-SecureString -AsPlainText 'Passwort' -Force)
- alle Benutzer der Domain in Datei exportieren
############################################################### # UserExport.ps1 ################### # Variablen ################### $Domain = "DC=domain,DC=zz" $eDomain = "@domain.zz" $Abteilung = "OU=Benutzer,OU=_Firma" $Folder = "C:\Temp" $File = "user.txt" ################### # prüfen ob Verzeichnis existiert, wenn nicht anlegen if( -not (Test-Path $Folder) ) { New-Item $Folder -Type directory -force | Out-Null } # Benutzer Export in Datei: Name, Nachname, Vorname Get-AdUser -Filter '*' -SearchBase "$Abteilung,$Domain" | Select-Object Name,Surname,Givenname ` | Export-CSV "$Folder\$File" -NoTypeInformation
- Benutzerangaben vervollständigen
############################################################### # UserUpdate.ps1 ################### # Variablen ################### $eDomain = "@domain.zz" $Folder = "C:\Temp" $File = "user.txt" ################### Import-Csv "$Folder\$File" | ForEach-Object { # $_ ist das aktuelle Objekt, das in der Pipeline gerade verarbeitet wird Set-ADuser -Identity $($_.Name) ` -SamAccountName $($_.Name) ` -UserPrincipalName $($_.Name + "$eDomain") ` -Surname $($_.Surname) ` -Givenname $($_.Givenname) ` -DisplayName $($_.Name) ` }
- Gruppe anlegen (Groupscope: DomainLocal | Global | Universal), Mitglieder hinzufügen
New-ADGroup -Name <Gruppenname> -GroupScope DomainLocal
Add-ADGroupMember -Identity <Gruppenname> -Members User1,User2
- Mitglieder einer Gruppe anzeigen
Get-ADGroupMember -Identity Administratoren
- Internet Explorer mit neuem Fenster starten
$ie=New-Object -ComObject InternetExplorer.Application
- IE Fenster sichtbar machen
$ie.Visible=$true
- Seite aufrufen
$ie.Navigate("https://login.1und1.de")
- wartet 4 sec bis die Seite aufgerufen wurde
while($ie.busy){Start-Sleep 4}
- das Feld Kunde ausfüllen, es trägt die ID "login.User", das gleiche mit dem Passwortfeld
$ie.Document.getElementById("login.User").value="domain.tld" $ie.Document.getElementById("login.Pass").value="geheim"
- Kommentare
# ein einzeiliges Kommentar
<# ein mehrzeiliger
Kommentar #>
Powershell Benutzeranmeldung für die eMail Adresse hinterlegen in Datei MailPW.txt. (Benutzer:eMail | Passwort:Passwort für die eMail Adresse)
(Get-Credential).password | ConvertFrom-SecureString > MailPW.txt
$PSEmailServer
- definiert den Standard Mailserver, da der Server eine Verschlüsselte Verbindung mit Authentifizierung möchte, muss -UseSSL
und -Port 587
angegeben werden.
## Mailversand.ps1 ## Variable $pw = Get-Content .\MailPW.txt | ConvertTo-SecureString $cred = New-Object System.Management.Automation.PSCredential "versand@domain.tld", $pw $emailto = "empfang@domain.tld" $emailfrom = "versand@domain.tld" $day=(get-date).dayofweek $date=(get-date -f yyyy-MM-dd) $PSEmailServer = "smtp.strato.de" ## TLS1.2 Unterstuetzung aktivieren [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 Send-MailMessage -Credential $cred ` -to $emailto ` -from $emailfrom ` -subject "[Windows] The backup has succeeded" ` -body "The backup on $day" ` -UseSSL -Port 587 -encoding ([System.Text.Encoding]::UTF8)
Fehler
Send-MailMessage : Fehler bei SSPI-Aufruf, siehe interne Ausnahme.
Lösung TLS1.2 aktivieren
- aktive Portokolle anzeigen # Validate the configured protocol(s) is/are listed [Net.ServicePointManager]::SecurityProtocol # Enable TLS 1.2 as Security Protocol [Net.ServicePointManager]::SecurityProtocol = ` [Net.SecurityProtocolType]::Tls12 ; # Enable TLS 1.2 and TLS 1.1 as Security Protocols [Net.ServicePointManager]::SecurityProtocol = ` [Net.SecurityProtocolType]::Tls12, [Net.SecurityProtocolType]::Tls11 ;
- per Aufgabenplanung anbinden, Einfache Aufgabe Aktion
Programm/Script:
Argumente hinzufügen:
Starten in:
%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe -command "C:\Scripte\Backup\Mailversand.ps1" C:\Scripte\Backup
Trigger: Bei einem Ereignis
Protokoll: Microsoft-Windows-Backup/Betriebsbereit
Quelle: Backup
Ereignis-ID: 7 Erfolgreich / 14 Fehlgeschlagen
- Liste von Laufwerken anzeigen
Get-PSDrive
- Liste von RegistrySchlüsseln zeigen
cd HKCU:\Software\Microsoft\Windows\CurrentVersion dir
- zeigt Namen und Wert von Registryeinträgen (Get-ItemProperty)
gp .\Run
ändern von RegistryEinträgen sp (Set-ItemProperty)
löschen von RegistryEinträgen rp (Remove-ItemProperty)
-Module oneget laden
import-module -name oneget
- Befehlsübersicht des Modules
get-command -module oneget
- Liste der verfügbare Pakete anzeigen
Find-Package | Out-Gridview