Einfach alle Umgebungsvariablen anzeigen lassen
1 |
Get-ChildItem Env: |
rewe
Einfach alle Umgebungsvariablen anzeigen lassen
1 |
Get-ChildItem Env: |
rewe
Um in PowerShell zusätzliche Eigenschaften an einem Objekt ändern zu können, muss wie folgt vorgegangen werden. Ein Beispiel anhand der edvsa-Drives. Erst müssen die zu ändernden Eigenschaften mittels dem Paramter –IncludedProperties geladen werden.
1 2 3 4 5 |
$User ="Stefan.Rehwald" $userData = Get-QADUser $User -IncludedProperties edsva-DriveB, edsva-DriveD, edsva-DriveE, edsva-DriveF, edsva-DriveG, edsva-DriveH, edsva-DriveI, edsva-DriveJ, edsva-DriveK, edsva-DriveL, edsva-DriveM, edsva-DriveN, edsva-DriveO, edsva-DriveP, edsva-DriveQ, edsva-DriveR, edsva-DriveS, edsva-DriveT, edsva-DriveU, edsva-DriveV, edsva-DriveW, edsva-driveX, edsva-driveY, edsva-driveZ Set-QADUser -Identity $userData.SamAccountName -ObjectAttributes @{'edsva-DriveK' = "\\Server007a\AccountLockouts"} |
So wurde der Wert von edsva-DriveK, also dem K-Laufwerk, in den Wert \\Server007a\AccountLockouts geändert. Analog verhält sich dieses Vorgehen bei Set-QADGroup ,Set-QADComputer oder Set-QADObject.
rewe
Die einfachste Variane ist, um sich mit dem Quest Service zu verbinden, mit Eingabe des Passwortes und Angabe des Benutzers.
1 2 3 |
$pw = read-host "Enter password" -AsSecureString $Username = "Stefan.Rehwald" connect-qadService -Proxy -ConnectionAccount "DOMAIN\$Username" -ConnectionPassword $pw |
Hier eine sehr dynamische Variante, diese ermittelt den ausführenden Benutzer, sowie die aktuelle Domain. Es wird ein verschlüsseltes Textfile im Userprofile angelegt indem das Passwort gespeichert wird. Ist das File älter als einen Tag, wird die Datei gelöscht und das Passwort muss erneut eingeben werden. So kann man sich bequem einen Tag lang ohne Passwort eingabe zum QAD Service verbinden.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
#Domain $Domain = [System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain().Name #ausführender User $User = $Domain $env:USERNAME # Prüfen ob das Passwort bereits hinterlegt ist # Der \ muss in Hochkommas "\", Gibt hier aber Probleme mit der Darstellung im Blog If (Test-Path -Path $env:USERPROFILE+\+$env:USERNAME.txt) { $date = Get-Date $date1dago = $date.AddDays(-1).Date $filepath = "$env:USERPROFILE\$env:USERNAME.txt" $file = Get-ChildItem $filepath if ($file.CreationTime.Date -lt $date1dago) { Remove-Item $file.PSPath Read-Host "Bitte das Passwort von $($User) eingeben" -assecurestring | ConvertFrom-SecureString | Out-File $env:USERPROFILE\$env:USERNAME.txt } # Passwort ist hinterlegt. } else { Read-Host "Bitte das Passwort von $($User) eingeben" -assecurestring | ConvertFrom-SecureString | Out-File $env:USERPROFILE\$env:USERNAME.txt } #Passwort einlesen (as secure String) $Password = Get-Content $env:USERPROFILE\$env:USERNAME.txt | ConvertTo-SecureString # Connection Change History connect-qadService -Proxy -ConnectionAccount $User -ConnectionPassword $Password # Script start |
rewe
Mit folgendem Snippet lassen sich alle edsva-Drives aufliste. Leider dauert dieser Vorgang etwas länger, da alle Eigenschaften des Objektes durchsucht werden. Wichtig ist die Angabe des Parameter -Proxy um sich auf den ARS zu verbinden.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
$User = "stefan.rehwald" Get-QADUser -Proxy $User -IncludeAllProperties | Select-Object 'edsva-drive*' # Ausgabe edsva-drivey : \\PROJEKTE edsva-drivex : \\AccountLockouts edsva-drivez : \\Workspace\Scripte$ edsva-DriveB : edsva-DriveD : edsva-DriveE : edsva-DriveF : edsva-DriveG : edsva-DriveH : edsva-DriveI : edsva-DriveJ : edsva-DriveK : edsva-DriveL : edsva-DriveM : edsva-DriveN : edsva-DriveO : edsva-DriveP : edsva-DriveQ : edsva-DriveR : edsva-DriveS : edsva-DriveT : edsva-DriveU : edsva-DriveV : edsva-DriveW : |
Einzelne Laufwerke lassen sich wie folgt auflisten, dies ist deutlich schneller, da hier nicht alle Eigenschaften des User-Objektes durchsucht werden.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
$User = Stefan.Rehwald $user = Get-QADUser -Proxy $User -IncludedProperties edsva-DriveB, edsva-DriveD, edsva-DriveE, edsva-DriveF, edsva-DriveG, edsva-DriveH, edsva-DriveI, edsva-DriveJ, edsva-DriveK, edsva-DriveL, edsva-DriveM, edsva-DriveN, edsva-DriveO, edsva-DriveP, edsva-DriveQ, edsva-DriveR, edsva-DriveS, edsva-DriveT, edsva-DriveU, edsva-DriveV, edsva-DriveW, edsva-driveX, edsva-driveY, edsva-driveZ $user."edsva-driveB" $user."edsva-driveD" $user."edsva-driveE" $user."edsva-driveF" $user."edsva-driveG" $user."edsva-driveH" $user."edsva-driveI" $user."edsva-driveJ" $user."edsva-driveK" $user."edsva-driveL" $user."edsva-driveM" $user."edsva-driveN" $user."edsva-driveO" $user."edsva-driveP" $user."edsva-driveQ" $user."edsva-driveR" $user."edsva-driveS" $user."edsva-driveT" $user."edsva-driveU" $user."edsva-driveV" $user."edsva-driveW" $user."edsva-driveX" $user."edsva-driveY" $user."edsva-driveZ" |
Wichtig ist hierbei, dass die Eigenschaft bei der Ausgabe in Hochkomas gesetzt wird, da sonst ein Fehler mit dem Hinweis eines unwerwarteten Tokens auftritt. Dies liegt an dem Bindestrich in der Bezeichnung der Laufwerke.
rewe
Mit der Cmdlet Add-QADGroupMember lassen sich User anderen Gruppen hinuzufügen.
1 2 3 4 |
$User = "Stefan.Rehwald" # hier wird der im Code der SamAccountName angegben. $Group = "Projektleitung Ost" Add-QADGroupMember $Group -Member $user |
rewe
Für einen Zeilenumbruch, also eine neue Zeile in einem String oder in einer Ausgabe in einem Textfile, gibt es folgende Möglichkeit dies zu realisieren.
1 2 3 4 |
[System.Environment]::NewLine # Zeilenumbruch einer Variable zuweisen $nl = [System.Environment]::NewLine |
rewe
Mittels Move-QADObject lässt sich eine Gruppe verschieben. Hier kann der volle Pfad oder der SamAccountName angegeben werden. Dazu muss die ZielOU angegeben werden.
1 2 3 4 |
$Group= "Filter Gruppe Web" $ZielOU = "OU=User, OU=Mitarbeiter, DC=stefan, DC=rehwald" Move-QADObject -Identity $Group -NewParentContainer $ZielOU |
Mehrere Gruppen lassen sich mittels einer Foreach Schleife verschieben. Dazu wird ver Move in einem Logfile festgehalten.
1 2 3 4 5 6 7 8 9 10 |
$path = "D:\Scripte\Grouplist.txt" $ZielOU = "OU=User, OU=Mitarbeiter, DC=stefan, DC=rehwald" $Grouplist = Get-Content $path foreach ($MoveGroup in $Grouplist) { Move-QADObject -Identity $MoveGroup -NewParentContainer $ZielOU $GroupInfo = Get-QADGroup $MoveGroup $info = "$($GroupInfo.name) erfolgreich verschoben nach $($GroupInfo.ParentContainer)" | Out-File -FilePath "D:\userlist\Grouplist_done.txt" -Append } |
rewe
Mittels Move-QADObject lässt sich eine User verschieben. Hier kann der volle Pfad oder der SamAccountName angegeben werden. Dazu muss die ZielOU angegeben werden.
1 2 3 |
$User = "Stefan.Rehwald" $ZielOU = "OU=User, OU=Mitarbeiter, DC=stefan, DC=rehwald" Move-QADObject -Identity $User -NewParentContainer $ZielOU |
Mehrere User lassen sich mittels einer Foreach Schleife verschieben. Dazu wird der Move in einem Logfile festgehalten.
1 2 3 4 5 6 7 8 9 10 |
$path = "D:\Scripte\Userlist.txt" $ZielOU = "OU=User, OU=Mitarbeiter, DC=stefan, DC=rehwald" $Grouplist = Get-Content $path foreach ($MoveUser in $Userlist) { Move-QADObject -Identity $MoveUser-NewParentContainer $ZielOU $GroupInfo = Get-QADUser $MoveUser $info = "$($UserInfo.name) erfolgreich verschoben nach $($UserInfo.ParentContainer)" | Out-File -FilePath "D:\userlist\Userlist_done.txt" -Append } |
rewe
Mit New-Item lassen sich neue Dateien oder Verzeichnisse, also Ordner anlegen.
1 |
New-Item -Path "D:\Eigene Dateien\" -Name "NeuerOrdner" -ItemType directory |
Path gibt dem Pfad an, wo das neue Verzeichnis liegen soll. Der Parameter Name gibt den Namen des neuen Verzeichnisses an. Mit ItemType wird bestimmt was für ein Typ das neue Objekt sein soll, eine Datei oder ein Verzeichnis.
rewe
Fehler könnten mittels Try Catch angefangen werden. Der Script-Code wird im Try-Block ausgeführt. Im Fehlerfall stürzt das Script nicht ab, sonder führt den Catch-Block aus. Hier kann auch der Fehler-Coder oder die Fehlerbeschreibung ausgegeben werden.
1 2 3 4 5 6 7 8 9 10 |
try { # Führe einen Code aus... } catch { $ErrorMessage = $_.Exception.Message $FailedItem = $_.Exception.ItemName Write-Host $ErrorMessage + " " + $FailedItem |
rewe