PowerShell – Befehle
PowerShell Integrated Scripting Environment (ISE) starten:
%windir%system32WindowsPowerShellv1.0PowerShell_ISE.exe
Anzeigen der PowerShell-Version:
$Host.Version
Auflisten der Cmdlets:
Get-Command
(kein Leerzeichen im Befehl)
Hilfe zu einem Befehl:
Get-Help
Get-Help Get-ADGroupMember -Full
Get-Help New-ADUser -Detailed
Get-Help Where-Object -Examples
Get-Help about*
Get-Help about_signing
Interaktive Hilfe zu einem Befehl mit den Parametern:
Show-Command
Aktualisieren der PowerShell-Hilfe:
Update-Help
Autovervollständigen von Cmdlets am Prompt:
Get-Exe + <Tab> ergibt Get-ExecutionPolicy.
Mit der <Tab>-Taste kann bei mehreren in Frage kommenden Befehlen
zum nächsten gewechselt werden.
Anzeige der Aliase für Cmdlets:
Get-Alias
Bildschirm löschen:
Clear-Host
Äquivalent zum DOS-Befehl dir /s:
dir -recurse
Get-ChildItem -recurse
Anzeige der verfügbaren Laufwerke (auch der Registry):
Get-PSDrive
Wechseln in einen Pfad der Registry:
cd hklm:software
Wechseln in das Laufwerk vom Active Directory:
cd AD:
danach zur Domäne wechseln:
cd „dc=test,dc=global“
danach in die Organisations-Einheit wechseln:
cd „ou=Personal“
danach eine neue Organisations-Einheit erstellen:
md „ou=Azubi“
Zurück in das Root-Verzeichnis wechseln:
cd c:
Skripts:
.BenutzerNeu.ps1oder mit dem Laufwerk:
c:BenutzerNeu.ps1
Dateiendung für die Skript-Datei:
*.ps1
Status zum Ausführen von Skripts anzeigen:
Get-ExecutionPolicy
(get-help about_signing)
Ausführen von Skripts erlauben:
Set-ExecutionPolicy remotesigned
Kommentar in einem Skript:
#
(gilt nur bis Zeilenende)
mehrzeilig:
<#
Text
#>
Fortsetzungs-Zeichen bei langen Befehlen für nächste Zeile:
`
(Gravis: Taste rechts neben dem <ß> mit <Shift> und danach <Leerzeichen>)
Starten eines Skripts im Hintergrund:
Start-Job -filepath c:scriptssample.ps1
Löschen eines PowerShell-Hintergrundauftrags:
Remove-Job
Skript für Anlegen eines Benutzers:
# BenutzerNeu.ps1
$Name = „Herrmann Maier“
$Accountname = „Herrmann.Maier“
$Description = „Leiter IT“
$Password = „Geheim+123“
$Computer = „localhost“
„Erstellung eines Users auf Rechner $Computer.“
$Container = [ADSI] „WinNT://$Computer“
$objUser = $Container.Create(„user“, $Accountname)
$objUser.Put(„Fullname“, $Name)
$objUser.Put(„Description“, $Description)
$objUser.SetPassword($Password)
$objUser.SetInfo()
„Der User $Name wurde erstellt.“
Skript zum Anzeigen der Platten-Belegung von mehreren Computern:
# HD.ps1
$aryComputers = „Server01″,“Server02“
Set-Variable -name intDriveType -value 3 -option constant
foreach ($strComputer in $aryComputers)
{„Hard drives on: “ + $strComputer
Get-WmiObject -class win32_logicaldisk -computername $strComputer |
Where {$_.drivetype -eq $intDriveType} | Format-table}
Skript zum Sichern eines Pfades mit Unterverzeichnissen in einen Ordner mit Zeitstempel:
# Backup.ps1
$NowDate = Get-Date -format „yyyy.MM.dd HH.mm.ss“
$BackupPath = „s:Backup$NowDate“
New-Item -Path $BackupPath -ItemType „Directory“
Copy-Item -Path d:Homepage -Destination $BackupPath -recurse -force
Write-Host
Write-Host „Folgende Pfade wurden gesichtert:“ -ForegroundColor green
Write-Host
Get-ChildItem -Path $BackupPath -recurse | Where-Object { $_.mode -match „d“ } |
Foreach-Object { Write-Host $_.FullName -ForegroundColor green}
Allgemeines:
Erstellen von Dateien, Ordnern und Registry-Schlüsseln:
New-Item
New-Item -Path s:Backup -ItemType „Directory“
Kopieren von Dateien, Ordnern und Registry-Schlüsseln:
Copy-Item
Copy-Item -Path H:Homepage -Destination s:Backup -recurse -force
Verschieben von Dateien, Ordnern und Registry-Schlüsseln:
Move-Item -path C:test.txt -destination E:Temptst.txt
Move-Item -path C:Temp -destination C:Logs
Move-Item hklm:softwareSchlüssel* hklm:softwareNeuerSchlüssel
Umbenennen von Dateien, Ordnern und Registry-Schlüsseln:
Rename-Item -path c:logfilestest.txt -newname test-alt.txt
Verschieben von Text-Dateien auch aus den Unterverzeichnissen:
Get-Childitem -path . -recurse -include *.txt | Move-Item -destination C:TextFiles
Anzeige der Dienste:
Get-Service
Anzeige der Prozesse:
Get-Process
Anzeige eines Ereignisses im System-Protokoll:
Get-Eventlog System | where {$_.EventID -eq 1000}
Anzeige eines Ereignisses im Anwendungs-Protokoll:
Get-Eventlog application | where {$_.EventID -eq 1000}
Device-ID einer virtuellen Netzwerk-Karte ermitteln: gwmi win32_networkadapter -filter „PhysicalAdapter=’FALSE'“ | select Name, DeviceID | fl
Prüfung auf Sperrung einer bestimmten Software auf einem Computer:
Import-Module AppLocker
Get-AppLockerPolicy -Effective -XML > C:Effective.xml
Get-ChildItem ‚C:Program FilesMicrosoft Office‘ -filter *.exe -Recurse | Convert-Path |
Test-AppLockerPolicy -XMLPolicy C:Effective.xml -User TestMaier
-Filter Denied,DeniedByDefault |
Export-CSV C:BlockedFiles.csv
Sicherung aller Gruppenrichtlinienobjekte, -berechtigungen und -verknüpfungen:
Backup-Gpo -All -Path \Server01GPOBackup
Cmdlets für Sicherung laden:
Add-PSSnapin windows.serverbackup
New-WBPolicy
New-WBFileSpec
New-WBBackupTarget
Set-WBVssBackupOptions
Wiederherstellungspunkte eines Computers (Windows XP bis 8) ermitteln:
Get-ComputerRestorePoint
Get-ComputerRestorePoint | format-table SequenceNumber, @{Label=“Date“;
Expression={$_.ConvertToDateTime($_.CreationTime)}}, Description -auto
Wiederherstellung des Computers vom Wiederherstellungspunkt 255:
Restore-Computer -RestorePoint 255
Prüfung der Wiederherstellung nach dem automatischen Neustart:
Get-ComputerRestorePoint -LastStatus
Wiederherstellungspunkt erzeugen:
Checkpoint-Computer -Description Datensicherung
Active Directory:
Laden des Active Directory-Moduls:
Import-Module ActiveDirectory
Auflisten der Cmdlets des Active Directory-Moduls:
Get-Command -Module ActiveDirectory
Get-Command -Noun AD* | more
Get-Command -Noun AD*User* | more
Get-Command *ADGroup*
Get-Command *ADComputer*
Get-Command *ADOrganizationalUnit*
Anzeige von Infos zur Gesamtstruktur:
Get-ADForest
Anzeige von Infos zur Domäne:
Get-ADDomain
Anzeige von Infos zum Domänen-Controller:
Get-ADDomainController
Anzeige der Root Directory Service Einträge am Domänen-Controller:
Get-ADRootDSE
(Domänen-Name, Schema, DNS, Funktionsebene von Gesamtstruktur, Domäne und DC)
Heraufstufen der Domäne auf Win 2008 R2:
Set-ADDomainMode -Identity test.global -DomainMode Windows2008R2Domain
Heraufstufen der Gesamtstruktur auf Win 2008 R2:
Set-ADForestMode -Identity test.global -ForestMode Windows2008R2Forest
Ändern der UPN-Suffixes-Eigenschaft für die Gesamtstruktur:
Set-ADForest -Identity test.global -UPNSuffixes @{replace=“test.global“,“test“,“sub.test.global“}
Set-ADForest -Identity test.global | Set-ADForest
-UPNSuffixes @{replace=“test.global“,“test“,“sub.test.global“}
$forest = Get-ADForest -Identity test.global
$forest.UPNSuffixes = „test.global“,“test“,“sub.test.global“
Set-ADForest -Instance $forest
Erstellung eines Subnetzes für den Standort Stuttgart:
New-ADObject -Name ‚192.168.1.0/24‘ -Type subnet -Description ‚192.168.1.0/255.255.255.0‘
-OtherAttributes
@{location=“Stuttgart“;siteObject=“cn=Stuttgart,cn=Sites,cn=Configuration,dc=test,dc=global“}
-Path „cn=Subnets,cn=Sites,cn=Configuration,dc=test,dc=global“
Best Practice Analyzer auf allen Domänencontrollern für die unterstützten Serverrollen:
Import-Module ServerManager
Import-Module BestPractices
Get-WindowsFeature | Where {$_.BestPracticesModelId -ne $null} | Invoke-BPAModel
Get-BPAModel | Get-BPAResult
Neue abgestimmte Kennwortrichtlinie erstellen und konfigurieren:
New-ADFineGrainedPasswordPolicy
(anschließend PSO mit ASDI-Edit msDS-PSOAppliesTo mit Objekt verbinden)
Verschieben eines AD-Objekts:
Move-ADObject
AD-Objekt vor versehentlichem Löschen schützen:
Set-ADObject „cn=Herrmann Maier,cn=Users,dc=test,dc=global“
-protectedFromAccidentalDeletion $true
Aktivieren des Papierkorbs bei AD Win 2008 R2 für Gesamtstruktur:
Enable-ADOptionalFeature -Identity ‚cn=Recycle Bin Feature,cn=Optional Features,
cn=Directory Service,cn=Windows NT,cn=Services,cn=Configuration,
dc=test,dc=global‘ -Scope ForestOrConfigurationSet -Target ‚test.global‘
Wiederherstellen eines AD-Objekts aus dem Papierkorb:
Get-ADObject -Filter {displayName -eq „Maier“} -IncludeDeletedObjects | Restore-ADObject
Wiederherstellen einer Organisations-Einheit aus dem Papierkorb:
Get-ADObject -ldapFilter:“(msDS-LastKnownRDN=Marketing)“ -IncludeDeletedObjects |
Restore-ADObject
Wiederherstellen der Unterobjekte dieser Organisations-Einheit aus dem Papierkorb:
Get-ADObject -SearchBase „cn=Deleted Objects,dc=test,dc=global“
-Filter {lastKnownParent -eq „ou=Marketing,dc=test,dc=global}“
-IncludeDeletedObjects | Restore-ADObject
Benutzer:
Anzeige eines Benutzers:
Get-ADUser -Identity Herrmann.Maier
Get-ADUser -Identity Herrmann.Maier -Properties *
Anzeigen aller Benutzerkonten mit dem Wert für lastlogon in Tabellenform:
Get-ADUser -Filter * -Properties lastlogon | FT
Get-ADUser -filter {*} -Properties name,lastlogon | Export-CSV -Path C:out.csv
Benutzerkonten, die auf einem RODC zwischengespeicherte Kennwörter haben:
Get-ADDomainControllerPasswordReplicationPolicyUsage -Identity „RODC1“ -RevealedAccounts |
ft Name,ObjectClass -A
Neuen Benutzer erstellen:
New-ADUser -Path „cn=Users,dc=test,dc=global“ -name „Hermann Maier“
-SAMAccountname Hermann.Maier
-UserPrincipalName „Hermann.Maier@test.global“
-DisplayName „Maier, Herrmann“
-EmailAddress „Herrmann.Maier@test.global“
-Description „Leiter IT“ -company „Test GmbH“ -Department „IT“ -Office „Stuttgart“
-EmployeeNumber 12345
-AccountPassword (ConvertTo-SecureString -AsPlaintext „Passwort“ -force)
-ChangePasswordAtLogon $true -Enabled $true
Neuen Benutzer bei AD LDS erstellen:
New-ADUser -name „Hermann Maier“ -DisplayName „Maier, Herrmann“
-server Server03:31389
-Path „cn=Users,dc=test,dc=local“
Neue Benutzer mit Import aus csv-Datei erstellen:
Import-Csv „C:NeueBenutzer.csv“ | NewADUser -organisation Test
Inhalt der Datei NeueBenutzer.csv:
name,sAmAccountName,GivenName,Surname
Hermann Maier,Herrmann.Maier,Maier,Hermann
Max Mustermann,Max.Mustermann,Mustermann,Max
Import-CSV Konten.csv | Foreach {New-ADUser -Name $_.Name -Enabled $true
-AccountPassword (ConvertTo-SecureString $_.Password -AsPlainText -Force)}
(Password ist eine Spalte in der Datei Konten.csv)
Ändern eines Benutzers:
Set-ADUser -Identity Herrmann.Maier -EmailAddress „Herrmann.Maier@test.global“
Entsperren eines Benutzers:
Unlock-ADAccount -Identity „cn=Herrmann Maier,cn=Users,dc=test,dc=global“
Löschen eines Benutzer bei AD LDS:
Remove-ADUser -Identity „cn=Herrmann Maier,cn=Users,dc=test,dc=local“
-server Server03:31389
-Path „cn=Users,dc=test,dc=local“
Aktivieren eines Benutzers:
Set-ADUser -Identity „cn=Herrmann Maier,cn=Users,dc=test,dc=global“
-Enabled $true
Enable-ADAccount
Einlesen eines Kennwortes vom Prompt in eine Variable:
$neuesPassword = (Read-Host -Prompt „Neues Kennwort“ -AsSecureString)
Zurücksetzen aller Benutzer-Kennworte auf den Inhalt der Variable:
Get-ADUser -Filter * | Set-ADAccountPassword -NewPassword $neuesPassword -Reset
Speichern eines Objekts in eine Variable:
$user = Get-ADUser -Identity Herrmann.Maier
Ändern eines Objekts über diese Variable:
Set-ADUser -Identity $user -Enabled $false
Ändern eines Objekts über eine Pipe:
Get-ADGroupMember -Identity Personal | Set-ADUser -Enabled $true
Get-ADUser -Filter (office -eq „Stuttgart“) | Set-ADUser -Enabled $true
Verwaltete Dienst-Konten:
Umwandeln eines Benutzer-Kontos in ein verwaltetes Dienst-Konto:
Set-ADServiceAccount
Erstellen eines verwalteten Dienst-Kontos im Active Directory:
New-ADServiceAccount SRV_APP01 -Enabled $true
-Path „cn=Managed Service Accounts,dc=test,dc=global“
New-ADServiceAccount -name _msvc_SQL1
Anzeigen der Eigenschaften eines verwalteten Dienst-Kontos:
Get-ADServiceAccount
Anzeigen der Eigenschaften aller verwalteten Dienst-Konten:
Get-ADServiceAccount -Filter *
Ändern eines verwalteten Dienst-Kontos:
Set-ADServiceAccount SRV_APP01 -Description „Anwendungspool 01 auf Server 01“
Löschen eines verwalteten Dienstkontos aus dem Active Directory:
Remove-ADServiceAccount
Zuordnung eines verwalteten Dienst-Kontos zu einem Computerkonto:
Add-ADComputerServiceAccount -computer SQL-Server01 -ServiceAccount _msvc_SQL1
(Ein verwaltetes Dienst-Konto kann nur einem Computer zugeordnet werden.
Deswegen ist die Verwendung bei Failover-Clustern nicht möglich,
da auf allen Knoten dasselbe Dienstkonto verwendet werden muß.)
Löschen der Zuordnung eines verwalteten Dienst-Kontos zu einem Computerkonto:
Remove-ADComputerServiceAccount Server01
Installieren eines verwalteten Dienst-Kontos auf einem Computer:
Install-ADServiceAccount -Identity SRV_APP01
Zurücksetzen des Passwortes des verwalteten Dienst-Kontos auf einem Computer:
Reset-ADServiceAccountPassword -Identity SRV_APP01
Entfernen des verwalteten Dienst-Kontos vom Computer:
Uninstall-ADServiceAccount -Identity SRV_APP01
Gruppen:
Befehle zum Verwalten von Gruppen:
New-ADGroup -Path „ou=Gruppen,dc=test,dc=global“ -Name „Vertrieb“
-sAMAccountname „Vertrieb“ -GroupCategory Security -GroupScope Global
Remove-ADGroup
Get-ADGroup
Set-ADGroup
Add-ADGroupMember -Identity „Vertrieb“
-Members „cn=Herrmann Maier,cn=Users,dc=test,dc=global“
Remove-ADGroupMember
Anzeige der Gruppen-Mitglieder:
Get-ADGroupMember -Identity „cn=Personal,dc=test,dc=global“
Get-ADGroupMember -Identity Personal
Get-ADGroupMember Personal
Anzeige der Gruppen-Mitglieder auch in verschachtelten Gruppen:
Get-ADGroupMember „Vertrieb“ -recursive | Select sAMAccountname
Anzeige der Gruppen-Mitglieder bei AD LDS:
Get-ADGroupMember -Identity „cn=Personal,dc=test,dc=local“
-server Server03:31389 -partitition „ou=Anwendung1, dc=test,dc=local“ |
FT Name,DistinguishedName -A
Organisationseinheiten:
Befehle zum Verwalten von Organisationseinheiten:
Get-ADOrganizationalUnit
New-ADOrganizationalUnit
Remove-ADOrganizationalUnit
Set-ADOrganizationalUnit
New-Item -name „ou=Zweigstelle“ -ItemType organizationalUnit
Computer-Konten:
Befehle zum Verwalten von Computer-Konten:
New-ADComputer -Name „DESKTOP13“ -sAMAccountName „DESKTOP 13“
-Path „cn=Computers,dc=test,dc=global“
Remove-ADComputer
Get-ADComputer
Set-ADComputer
Server-Rollen und -Features:
Modul Server-Manager laden:
Import-Modul ServerManager
Installation des DHCP-Servers:
Add-WindowsFeature DHCP
Installation des Distributed File Systems:
Add-WindowsFeature FS-DFS
Hinzufügen des AD FS-Moduls:
Add-PSSnapin Microsoft.Adfs.Powershell
Installation und Konfiguration von AD RMS:
Import-Module AdRms
Administration von AD RMS:
Import-Module AdRmsAdmin
Installation eines Web-Servers:
Add-WindowsFeature Web-Server
Cmdlets für die Administration vom Web Server (IIS) laden:
Add-PSSnapin WebAdministration
Installation eines NLB-Clusters:
Add-WindowsFeature NLB,Web-Server
Deinstallation eines NLB-Clusters:
Remove-WindowsFeature NLB,Web-Server -restart
Installation der Failover-Clusterunterstützung:
Add-WindowsFeature Failover-Clustering
Installation des Routing- und RAS-Dienstes:
Add-WindowsFeature NPAS-RRAS-Services
Installation des Netzwerkrichtlinienservers:
Add-WindowsFeature NPAS
Installation von DirectAccess:
Add-WindowsFeature DAMC
Remote-Dienste und -verwaltung:
Installation der Remotedesktop-Dienste:
Add-WindowsFeature Remote-Desktop-Services
Installation der Remoteserver-Verwaltungstools:
Add-WindowsFeature RSAT
Start-Art eines Dienstes (Remoteverwaltung) ändern:
Set-Service Winrm -startuptype automatic
Starten eines Dienstes (Remoteverwaltung):
Start-Service winrm
Aktivierung der Remoteverwaltung mittels PowerShell auf einem Server:
Enable-PSRemoting -force
Deaktivierung der Remoteverwaltung mittels PowerShell auf einem Server:
Disable-PSRemoting -force
Ausführen von Befehlen auf einem Remotecomputer:
Invoke-Command -script {Import-Module ServerManager; Get-WindowsFeature}
-computername Server03
Ausführen eines Skripts auf einem Remotecomputer:
Invoke-Command -filepath c:scriptstest.ps1 -computerName Server01
PowerShell-Version von allen in der Datei machines.txt aufgeführten Computern:
$version = Invoke-Command -computername (get-content machines.txt) -scriptblock {(get-host).version}