Kategorien

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:

Das Ausführen von Skripts erfolgt mit Angabe dessen kompletten Pfades.Wenn man sich im richtigen Pfad befindet:
.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}