Fertige Scripte

Ausführungsberechtigung von Scripten

Scripte werden ausgeführt egal woher sie kommen oder ob sie Signiert sind

Set-ExecutionPolicy Unrestricted


Überblick Auswahl

Get-Executionpolicy

Variablen

Eine Variable lässt sich grundsätzlich zur Speicherung eines Werts verwenden und fängt immer mit einem $ an, in PowerShell kann eine Variable auch den kompletten Output eines Befehls speichern.

Beispiele:
#Gibt mir eine Prozessübersicht aus $a aus

$a="[Prozessname]"
Get-Process $a

#Füllt mehrere Variablen gleichzeitig mit dem Wert 5

$a=$b=$c= 5

#Variablenwerte gegenseitig austauschen

$Wert1=10; $Wert2=20;
$Wert1,$Wert2 = $Wert2, $Wert1

#Übersicht über verwendete Variablen

Dir Variable:

#Überprüfen ob eine Variable Existiert(Prüfe auf Variable $wert2)

Test-Path variable:\wert2

Variablentypen und strenge Typisierung

Powershell passt den Datentyp für Variablen automatisch an. Es muss nicht extra der Datentyp mitgegeben werden. Um festzustellen, in welchem Datentyp Powershell Werte speichern würde ein kleines Beispiel:

 (12).GetType().Name 

Gibt den Datentyp aus, des Wertes welche rin der Klammer steht. Der Wert kann einfach in Klammern geschrieben sein, wie oben im Beispiel. Er benötigt keine extra Variable.

Feste Typen zuweisen

Um einer Variable einen festen Typ zuzuweisen, schriebt man den gewünschten Typ einfach in [] Klammern vor der Variable. Beispiel: Ich will einer variable nur einen Wertbereich von 0-255 zuweisen können. Hierzu kann ich die Variable einfach als Byte anlegen.

 [Byte]$zahl = 35 

#Wenn wir der Variable [$zahl] anschließend einen höheren Wert als 255 zuweisen wollen, bekommen wir die Fehlermeldung das die Variable vom Typ Byte nicht mit diesem Wert konvertiert werden kann.

Wenn man mit Datum und Uhrezeiten arbeitet ist es sehr sinnvoll einen festen Datentyp zu vergeben, sonst speichert PS das als String und dadurch haben wir keinen zugang zu speziellen Datumsfunktionen. Beispiel:

#Normales abspeichern in eine Variable, die von PS als String zugewiesen wird.

 $datum = "12. November 2014"

#Ausgabe

 12. November 2014

#Zuweisung mit dem festen Datentyp.

 [datetime]$datum = "12. November 2014"

#Ausgabe

 Mittwoch, 12. November 2014 00:00:00

Arrays

Gibt mir eine Prozessübersicht von mehreren Prozessen aus dem Array „procs“ aus.

$procs = @{name=”[Prozessname]”,”[Prozessname]”}
Get-Process @procs

Hashtables

Hashtables sind Felder, bei denen man einzelne Feldelementen einen Namen (oder Schöüssel) zuweist. Die Felder werden so nicht mehr über den index angesprochen sondern über slebst benannte Schlüssel. Hashtables speichern somit Schlüssel-Wert-Paare.

Hashtable anlegen

#Eine neue Hashtable mit Schlüssel-Wert_Paar anlegen

$liste = @{Name ="PC01"; IP="10.10.10.10"; Benutzer="Karl Kaefer"}

#Ausgabe:

Name                           Value
----                           -----
Benutzer                       Karl Kaefer
IP                             10.10.10.10
Name                           PC01

#Auf Name und IP Werte über Schlüssel zugreifen

$liste["IP","Benutzer"]

#Ausgabe

10.10.10.10.
Karl Kaefer

Powershell Befehle

BefehlBeispielErklärung
Get-ProcessGet-Process [„Prozessname“],[„Prozessname“]Gibt eine Übersicht der angebenenen, laufenenden Prozesse des Clients aus
Read-HostRead-HostEinlesen auf der Console
Write-HostWrite-HostAusgaben auf der Console
Remove−ItemRemove-Item −path “<Pfad>“ −force Löscht eine Datei ohne Nachfrage (-force)
New-ItemNew−Item −Path “<Pfad>“ −itemtype directoryNeues Verzeichnis erstellen
Get-LocationGet-LocationAktueller Pfad anzeigen
Get-ADGroupMemberGet-ADGroupMember -Identity “<Gruppenname>„Gibt alle Benutzer der angegebenen Gruppe aus
Get-VMGet-VM Übersicht aller VMs in Windows Server 2012r2
Get-VM Get-VM –ComputerName [Hyper-V Hostname] [Senkrechter PIPE] Where-Object {$_.State –eq 'Running'} Auflistung aller VMs die auf [Hyper-V Hostname] laufen
Get-ChilditemGet-Childitem -path c:\windows -filter *.exe -r -nZeigt alle ausführbaeren programme (.exe) an, die sich untern c:\Windows oder einem seiner Unterordner befinden
Dir [Platzhalter]Dir C:\[AW]*Listet alle Dateien und Ordner im angegebenen Verzeichnis auf, welche entwerder mit A oder W beginnen.
Get-AliasGet-AliasZeigt alle Alias-Namen an
dir env:dir env:Zeigt eine Übersicht der Umgebungsvariablen an
gpresultgpresult /H <Pfad><datei.html>Gibt eine Übersicht der GPO Settings als HTML Report an

Alias-Namen

Alias-NamePS-Befehl
%ForEach-Object
?Where-Object
acAdd-Content
asnpAdd-PSSnapin
catGet-Content
cdSet-Location
chdirSet-Location
clcClear-Content
clearClear-Host
clhyClear-History
cliClear-Item
clpClear-ItemProperty
clsClear-Host
clvClear-Variable
cnsnConnect-PSSession
compareCompare-Object
copyCopy-Item
cpCopy-Item
cpiCopy-Item
cppCopy-ItemProperty
curlInvoke-WebRequest
cvpaConvert-Path
dbpDisable-PSBreakpoint
delRemove-Item
diffCompare-Object
dirGet-ChildItem
dnsnDisconnect-PSSession
ebpEnable-PSBreakpoint
echoWrite-Output
epalExport-Alias
epcsvExport-Csv
epsnExport-PSSession
eraseRemove-Item
etsnEnter-PSSession
exsnExit-PSSession
fcFormat-Custom
flFormat-List
foreachForEach-Object
ftFormat-Table
fwFormat-Wide
galGet-Alias
gbpGet-PSBreakpoint
gcGet-Content
gciGet-ChildItem
gcmGet-Command
gcsGet-PSCallStack
gdrGet-PSDrive
ghyGet-History
giGet-Item
gjbGet-Job
glGet-Location
gmGet-Member
gmoGet-Module
gpGet-ItemProperty
gpsGet-Process
groupGroup-Object
gsnGet-PSSession
gsnpGet-PSSnapin
gsvGet-Service
guGet-Unique
gvGet-Variable
gwmiGet-WmiObject
hGet-History
historyGet-History
icmInvoke-Command
iexInvoke-Expression
ihyInvoke-History
iiInvoke-Item
ipalImport-Alias
ipcsvImport-Csv
ipmoImport-Module
ipsnImport-PSSession
irmInvoke-RestMethod
isepowershell_ise.exe
iwmiInvoke-WmiMethod
iwrInvoke-WebRequest
killStop-Process
lpOut-Printer
lsGet-ChildItem
manhelp
mdmkdir
measureMeasure-Object
miMove-Item
mountNew-PSDrive
moveMove-Item
mpMove-ItemProperty
mvMove-Item
nalNew-Alias
ndrNew-PSDrive
niNew-Item
nmoNew-Module
npsscNew-PSSessionConfigurationFile
nsnNew-PSSession
nvNew-Variable
ogvOut-GridView
ohOut-Host
popdPop-Location
psGet-Process
pushdPush-Location
pwdGet-Location
rInvoke-History
rbpRemove-PSBreakpoint
rcjbReceive-Job
rcsnReceive-PSSession
rdRemove-Item
rdrRemove-PSDrive
renRename-Item
riRemove-Item
rjbRemove-Job
rmRemove-Item
rmdirRemove-Item
rmoRemove-Module
rniRename-Item
rnpRename-ItemProperty
rpRemove-ItemProperty
rsnRemove-PSSession
rsnpRemove-PSSnapin
rujbResume-Job
rvRemove-Variable
rvpaResolve-Path
rwmiRemove-WmiObject
sajbStart-Job
salSet-Alias
sapsStart-Process
sasvStart-Service
sbpSet-PSBreakpoint
scSet-Content
selectSelect-Object
setSet-Variable
shcmShow-Command
siSet-Item
slSet-Location
sleepStart-Sleep
slsSelect-String
sortSort-Object
spSet-ItemProperty
spjbStop-Job
sppsStop-Process
spsvStop-Service
startStart-Process
sujbSuspend-Job
svSet-Variable
swmiSet-WmiInstance
teeTee-Object
trcmTrace-Command
typeGet-Content
wgetInvoke-WebRequest
whereWhere-Object
wjbWait-Job
writeWrite-Output

Eigene Alias-Namen setzen

Beispiel für das Setzen eines eigenen Alias.

Set-Alias edit notepad.exe

Kleine Scripte

Benutzer einer Gruppe hinzufügen

.ps1 Datei

Import-module ActiveDirectory 
Import-CSV "C:\Scripts\Users.csv" | % { 
Add-ADGroupMember -Identity TestGroup1 -Member $_.UserName 
} 


.CSV Datei:

#Bezeichnung siehe PS Script Variable#
UserName
#Usernamen die hinzugefügt werden sollen#
TUser1
TUser2
TUser3
TUser4

Anzahl der AD User einer bestimmten OU auslesen

(Get-ADUser -Filter * -SearchBase "OU=UserOU,DC=domain,DC=local").count

Beispiel: Auslesen Useranzahl einer SubOU

(Get-ADUser -Filter * -SearchBase "OU=SUB2,OU=SUB1,OU=RootOU,DC=Domain,DC=local").count

Prüfen ob eine Datei bereits existiert

 if(test−path <C:\meinPfad>) { echo "found" } else { echo "not found} 

Get ALL User from OU - filter UPN

Get-ADUser -Filter * -SearchBase 'ou=InternalUsers,ou=users,ou=gvsh,dc=gvsh,dc=local' -Properties userPrincipalName

Get all disabled users

 Get-ADUser -Filter 'Enabled -eq $false' 

Get All OUs in a domain

 Get-ADOrganizationalUnit -Filter 'Name -like "*"' | Format-Table Name, DistinguishedName -A 


Get all Group memberships from specific user

(Get-ADUser -Identity <username> -Properties memberof | Select-Object memberof).memberof

AD Benutzer per Script anlegen

.ps1 Script:

Import-Module ActiveDirectory 
$Users = Import-Csv -Delimiter ";" -Path "<PFAD>\User.csv"   
foreach ($User in $Users)  
{  
    $OU = "OU=Geschäftsleitung,DC=sabri,DC=local"  
    $Password = $User.password 
    $Detailedname = $User.firstname + " " + $User.name 
    $UserFirstname = $User.Firstname 
    $FirstLetterFirstname = $UserFirstname.substring(0,1) 
    $SAM = $FirstLetterFirstname + $User.name
    New-ADUser -Name $Detailedname -SamAccountName $SAM -UserPrincipalName $SAM -DisplayName $Detailedname -GivenName $user.firstname -Surname $user.name -AccountPassword (ConvertTo-SecureString $Password -AsPlainText -Force) -Enabled $true -Path $OU  
}

Beispiel CSV Datei:

Name;Firstname;Password
Simpson;Marge;Pa$$w0rd!
Bass;Chuck;Pa$$w0rd!

Hyper-V

VMs in Hyper-V über PS anlegen

 New-VM [MyVM] -MemoryStartupBytes [1024MB] -SwitchName [Extern1] -NewVHDPath [MyVHD.vhdx] -NewVHDSizeBytes <20GB>

VMs Exportieren

Export-VM [Name] -Path [Pfadangabe] -ASJob

Robocopy

Robocopy <Quelle> <Ziel>< Datei(en)>/< Option>

Option E:
Kopiert Unterverzeichnisse (auch leere Verzeichnisse).
UNC Pfad mit: <\\Server\Freigabe>

Ausgabe aller Services welche den Startmode "automatisch" besitzen, allerdings nicht gestartet sind

Get-WmiObject -Class Win32_Service | Select-Object Name,State,StartMode | Where-Object {$_.State -ne "Running" -and $_.StartMode -eq "Auto"}

Get ServiceConnectionPoint (SCP)

Get-ADObject -LDAPFilter "(objectClass=serviceConnectionPoint)"

While Schleife

mit while eine endlosschleife generieren, welche läuft, bis i größer 10 wird - dann greift der break.

$i=0
while($true) {
  $i++
  write-host $i
  if ($i -ge 10) {break}
}

Get ADGroupmembership from user across multidomain

(Get-ADUser -Server WIEDIR01001.corp.heidelberg.com:3268 -Ldapfilter "(ObjectClass=user)(samaccountname=chiamike)" -Properties *).memberof | Get-ADGroup -Server WIEDIR01001.corp.heidelberg.com:3268  | Select-Object name 

Get ADUser from specific department

Get-ADUser -Filter * -Properties Department | Where{$_.department -like "*<Department>*"} |Select Department,name | out-file C:\temp\Output.txt

Get all installed roles and features

Get-WindowsFeature | Where-Object {$_. installstate -eq "installed"} | Format-List Name,Installstate | more
 
 powershell.txt · Zuletzt geändert: 2019/09/19 08:18 von 165.225.73.22
[unknown button type]
 
Recent changes RSS feed Driven by DokuWiki