Benutzer mit den meisten Antworten
PowerShell HomeDrive ändern Problem

Frage
-
Hallo zusammen,
ich benötige Hilfe bei meinen Skript zur Änderung des HomeDrives bei allen Usern einer OU.
Der Admin der das Skript ausführt wird aufgefordert eine bestimmte OU zu nennen (so einfach wie möglich).
Anschließend soll ein Server ausgesucht werden, welcher als neues Verzeichnis eingetragen werden soll.
$AlleOUs = Get-ADOrganizationalUnit -filter * | select DistinguishedName -expandproperty DistinguishedName do {write-host "Welche OU ist betroffen? "-NoNewline; $OUAbfrage = Read-Host} while ($OUAbfrage -eq "") if ($AlleOUs -match $OUAbfrage ) { $OUDistName = $AlleOUs -match $OUAbfrage do {write-host "Welcher Server soll eingetragen werden? " -NoNewline; $ServerAbfrage = Read-Host} while ($ServerAbfrage -eq "") Get-ADUser -Filter * -SearchBase "$OUDistName" | Set-ADUser -HomeDrive "U" -HomeDirectory "\\$ServerAbfrage\Users$\$env:USERNAME" if () { } } else { Write-Host "Es existiert keine OU unter diesen Namen" exit }
Nun habe ich zwei Probleme:
1. Er trägt leider bei
$env:USERNAME
meinen Adminbenutzer ein, mit welchen ich das Skript gestartet habe.
Wie schaffe ich es das er statt dessen den User der OU nimmt? Bei welchen er gerade den Pfad ändert?2. Wie baue ich die "if" Abfrage, das wenn 2x OUs unter den Namen gefunden wurden, eine Auswahl mit [1] OU1 [2] OU2 usw. erscheint und man dann die richtige auswählen muss?
Vielen Dank im Voraus :)
Antworten
-
hast Du das hier gesehen
das ist schon fertig
https://gallery.technet.microsoft.com/PowerShell-script-to-832e08ed
Klaus
- Als Antwort markiert LemonEistee Dienstag, 18. Juni 2019 07:44
Alle Antworten
-
ich denke mal das das Skript nicht von Dir ist.
sofern ich das so richtig sehen und ohne es selbst ausprobiert zu haben
in dem Object der Pipeline sollte der Name enthalten sein
also wäre hier die Lösung wohl
Get-ADUser -Filter * -SearchBase "$OUDistName" | Set-ADUser -HomeDrive "U" -HomeDirectory "\\$ServerAbfrage\Users$\$_.SurName"
ddas wird Dir den Namen (Nachname) eintragen. Wenn Du das noch mit dem Vornamen willst
kannst Du nach dem Muster $_.Surname + "_" + $_.Givename arbeiten. wie üblich gibt es hier nicht nur eine Lösung sondern x auch die Schreiweise vom Powershell Du kannst hier das Objekt verwenden mit $($_.) oder mit dem String Builder .. je nachdem was Dir mehr liegt, ich denke nicht das es hier auf die Geschwindigkeit ankommt, sondern vielmehr darum das Du es verstehen kannst.
lg
| Please Mark This As Answer if it solved your issue |
| Please Vote This As Helpful if it helps to solve your issue |
| Disclaimer:
This posting is provided with no warranties and confers no rights. |
| N 48° 8' 39.8419" E 11° 36' 1.3359" |
Klaus
- Bearbeitet Klaus Bilger Montag, 3. Juni 2019 14:39
-
Hallo und erst mal danke für die Antwort.
Das Skript ist zusammengebastelt aus mehreren Technet Einträgen, da ich noch nicht so fit bin in PowerShell :)Also ich brauchte statt den Nachnamen oder Vornamen im Prinzip den Wert aus "Benutzeranmeldename". Ich hätte eigentlich gedacht das es dann $_.Username ist, jedoch klappte dies nicht und er schrieb ".Username" rein statt "Mustermann"
Siehe Bild: https://imgur.com/a/XOQgI0g
-
hi,
also wenn ich das Bild richtig sehe dan ist Dein Pfad falsch
das sollte dann
Get-ADUser -Filter * -SearchBase "$OUDistName" | Set-ADUser -HomeDrive "U" -HomeDirectory "\\$ServerAbfrage\$_.UserPrincipalName"
sein das wäre dann der Anmeldename wobei hier dann "user@domain" als UPN steht
was Du auch noch verwenden kannst ist der "SamAccountName" der wäre hier auch eindeutig.
oder brauchst Du nur den Teil 1 von dem UPN ?
wie soll denn die Verzeichnisstruktur aussehen ?
was Du als kontrolle mal versuchen kannst wäre
$server ="\\TESTSERVER" $Users = Get-ADUser -Filter {Name -like "*MeinSuchMuster*"} foreach($User in $Users) { $Homeshare = $server +"\" +$($user.Name) write-host $Homeshare }
Klaus
| Please Mark This As Answer if it solved your issue |
| Please Vote This As Helpful if it helps to solve your issue |
| Disclaimer:
This posting is provided with no warranties and confers no rights. |
| N 48° 8' 39.8419" E 11° 36' 1.3359" |
- Bearbeitet Klaus Bilger Dienstag, 4. Juni 2019 10:03
-
Hi, danke für die schnelle Rückmeldung.
Also das "User" stimmt schon weil es ein Unterordner ist wo dann die ganzen Benutzerordner sind. Doch selbst wenn ich dieses weg lasse, schreibt er folgendes "\\Testc\.SamAccountName". Er fügt also nicht das "Mustermann" ein leider.
-
Zeigt keine Fehler an und gibt mir die Users aus. Ändert jedoch nichts bei diesen.
Ich habe übrigens noch folgende Methode gefunden:
$AlleOUs = Get-ADOrganizationalUnit -filter * | select DistinguishedName -expandproperty DistinguishedName do {write-host "Welche OU ist betroffen? "-NoNewline; $OUAbfrage = Read-Host} while ($OUAbfrage -eq "") if ($AlleOUs -match $OUAbfrage ) { $OUDistName = $AlleOUs -match $OUAbfrage do {write-host "Welcher Server soll eingetragen werden? " -NoNewline; $ServerAbfrage = Read-Host} while ($ServerAbfrage -eq "") Get-ADUser -Filter * -SearchBase "$OUDistName" foreach($user in $OUDistName){ Set-ADUser -Identity $Users -HomeDrive "U" -HomeDirectory "\\$ServerAbfrage\$user.Name" } }
Jedoch bekomme ich dann folgende Fehlermeldung:
Set-ADUser : Das Argument für den Parameter "Identity" kann nicht überprüft werden. Das Argument ist NULL. Geben Sie einen gültigen Wert für das Argument an, und führen Sie den Befehl erneut aus.+ Set-ADUser -Identity $Users -HomeDrive "U" -HomeDirectory "\\$Server ...
-
Was mir auf Anhieb auffällt ist das Du -Identity $Users schreibst, die Variable in der Schleife aber $user heißt.
Stimmt, danke! Leider kommt nun eine andere Fehlermeldung als ich es auf $user umgeändert habe
Set-ADUser : Unter "DC=test,DC=local" kann kein Objekt mit der ID "OU= Test,OU=Users,OU=Test,OU=Test,DC=test,DC=local" gefunden werden. In Zeile:3 Zeichen:13 + Set-ADUser -Identity $user -HomeDrive "U" -HomeDirectory "\\$ServerA ...
-
wenn Du in einer Schleife bist
ist das Array $USERS der einzelne Datensatz aber $User, wobei Du hier jeden Wert verwenden kannst, also auf $RS oder $DS oder $Row was du willst.
lg Klaus
zeig mal das ganze Script mal sehen ob ich die Zeit finde es Dir fertig zu machen
l
Klaus
-
Hallo,
okay danke :) Hier wäre das komplette Skript
$AlleOUs = Get-ADOrganizationalUnit -filter * | select DistinguishedName -expandproperty DistinguishedName do {write-host "Welche OU ist betroffen? "-NoNewline; $OUAbfrage = Read-Host} while ($OUAbfrage -eq "") if ($AlleOUs -match $OUAbfrage ) { $OUDistName = $AlleOUs -match $OUAbfrage do {write-host "Welcher Server soll eingetragen werden? " -NoNewline; $ServerAbfrage = Read-Host} while ($ServerAbfrage -eq "") Get-ADUser -Filter * -SearchBase "$OUDistName" foreach($user in $OUDistName){ Set-ADUser -Identity $user -HomeDrive "U" -HomeDirectory "\\$ServerAbfrage\User\$user.Name" } } else { Write-Host "Es existiert keine OU unter diesen Namen" exit }
-
Probiere so:
$users = Get-ADUser -Filter * -SearchBase "$OUDistName" foreach($user in $users){ ... }
P.S.
Ich würde beim Testen noch ein -whatif in die Zeile mit Set-ADUser setzen, damit die Änderungen nicht sofort geschrieben werden
- Bearbeitet Jakša Skelin Donnerstag, 6. Juni 2019 06:23
-
Da fallen mir gleich mehrere Fettnäpfchen auf :-)
1. Warum zerstörst Du die OU-Objekte durch das folgende Select-Object? Laß sie doch einfach ganz... Und warum holst Du alle OUs aus dem ganzen AD?
2. Warum Read-Host? "$SelectedOUs = $alleOus | Out-GridView -PassThrough" (Aus dem Kopf, kann sein daß die Syntax nicht ganz stimmt :-))
3. Du fragst zwar die User aus der OU ab, aber Du speicherst die nirgends?!? Das Foreach iteriert über das Array $OUDistName, und da steht ja nur eine OU drin und nicht die User...
Greetings/Grüße, Martin - https://mvp.microsoft.com/en-us/PublicProfile/5000017 Mal ein gutes Buch über GPOs lesen? - http://www.amazon.de/Windows-Server-2012--8-Gruppenrichtlinien/dp/3866456956 Good or bad GPOs? My blog - http://evilgpo.blogspot.com And if IT bothers me? Coke bottle design refreshment - http://sdrv.ms/14t35cq
-
hast Du das hier gesehen
das ist schon fertig
https://gallery.technet.microsoft.com/PowerShell-script-to-832e08ed
Klaus
- Als Antwort markiert LemonEistee Dienstag, 18. Juni 2019 07:44