hendrik2586
Goto Top

Username in Powershell Script für Änderung AD Nutzer

Guten Abend liebe Kolleginnen und Kollegen! face-smile


Fangen wir mal direkt an mit den Infos!


Windows Server 2016 + Windows 10 Clients!

Ich möchte gerne per PS Skript einen neuen Homeordner für die User angeben. Soweit so gut, nur kann ich die Variable für den Username ( Ordneranme) nicht mitgeben. Sitze seit Stunden über dem Problem.

$userbase = Get-ADUser -Filter * -SearchBase “OU=Test,OU=Users,OU=MyBusiness,DC=intern,DC=bbb,DC=local"

foreach($user in $userbase){
$path = “\\DC1\Usershares\$env:username” ( %Username% = wenn man es händisch eintragen würde)
$homedriveLetter = “H:”
Set-ADUser -Identity $user -HomeDirectory $path -HomeDrive $homedriveLetter
}



Vielleicht sehen die " Scripter" unter euch schon was ich vor habe.


Bin für jede Hilfe dankbar

Content-Key: 522218

Url: https://administrator.de/contentid/522218

Printed on: April 25, 2024 at 13:04 o'clock

Mitglied: 141965
141965 Dec 05, 2019 updated at 15:49:24 (UTC)
Goto Top
$env:username
Das ist nur der Username des aktuell angemeldeten Users, bzw der der das Skript ausführt.

Den SamAccountName des jeweiligen Users musst du aus dem $user Objekt der Foreach-Schleife ableiten
$path = "\\DC1\Usershares\$($user.SamAccountName)"
Member: erikro
Solution erikro Dec 05, 2019 at 15:48:56 (UTC)
Goto Top
Moin,

Zitat von @Hendrik2586:
 //$userbase = Get-ADUser -Filter * -SearchBase “OU=Test,OU=Users,OU=MyBusiness,DC=intern,DC=bbb,DC=local"  
> 
> foreach($user in $userbase){
> $path = “\\DC1\Usershares\$env:username”        ( %Username% = wenn man es händisch eintragen würde)
> $homedriveLetter = “H:”
> Set-ADUser -Identity $user -HomeDirectory $path -HomeDrive $homedriveLetter
> }//

Bitte bei Code die Tags für den Code drumrum schreiben oder links auf </> klicken.

Nun zum Problem:

In $env:username steht der Username des Users, der das Skript ausführt. Das rennt spätestens beim zweiten Schleifendurchlauf gegen die Wand, weil es das Verzeichnis dann ja schon gibt. Und der User, bei dem das klappt, hat dann als Namen seines Homedirs den des Admins, der das gemacht hat. Deshalb so:

$path = \\dc1\usershares\$($user.samaccountname)

hth

Erik
Member: Hendrik2586
Hendrik2586 Dec 05, 2019 at 15:49:22 (UTC)
Goto Top
Zitat von @141965:

$env:username
Das ist nur der Username des aktuell angemeldeten Users.
Den SamAccoutnName musst du aus dem $user Objekt der Foreach-Schleife ableiten
> $path = "\\DC1\Usershares\$($user.SamAccountName)"
> 

Oh man bin ich doof. X-/

Das $env nicht so wirklich klappt ist mir schon augefallen.
Member: Hendrik2586
Hendrik2586 Dec 05, 2019 at 15:52:28 (UTC)
Goto Top
Zitat von @Hendrik2586:

Zitat von @141965:

$env:username
Das ist nur der Username des aktuell angemeldeten Users.
Den SamAccoutnName musst du aus dem $user Objekt der Foreach-Schleife ableiten
>> $path = "\\DC1\Usershares\$($user.SamAccountName)"
>> 

Oh man bin ich doof. X-/

Das $env nicht so wirklich klappt ist mir schon augefallen.



In Richtung SamAccountName war ich auch schon weil das ja die einzige Variable ist die dort funktionieren würde. Ich wusste nur nicht wie ich die variabel dort einbinden kann. Oh man eh! X-D
Mitglied: 141965
141965 Dec 05, 2019 updated at 16:03:25 (UTC)
Goto Top
Zitat von @Hendrik2586:
In Richtung SamAccountName war ich auch schon weil das ja die einzige Variable ist die dort funktionieren würde. Ich wusste nur nicht wie ich die variabel dort einbinden kann. Oh man eh! X-D

Einfach mal richtig nachschauen dann siehst du auch alles was die User noch so zu bieten haben ...
Get-ADUser -Filter * -SearchBase "OU=Test,OU=Users,OU=MyBusiness,DC=intern,DC=bbb,DC=local" -Properties * | fl *  
Member: 0x32f1
0x32f1 Dec 05, 2019 at 18:20:07 (UTC)
Goto Top
Zitat von @Hendrik2586:
$userbase = Get-ADUser -Filter * -SearchBase “OU=Test,OU=Users,OU=MyBusiness,DC=intern,DC=bbb,DC=local"

foreach($user in $userbase){
$path = “\\DC1\Usershares\$env:username” ( %Username% = wenn man es händisch eintragen würde)
$homedriveLetter = “H:”
Set-ADUser -Identity $user -HomeDirectory $path -HomeDrive $homedriveLetter
}


Na, wenn wir schon dabei sind: Kein Grund, $homedriveLetter bei jedem Durchlauf mit dem selben Wert zu überschreiben, oder?

$userbase = Get-ADUser -Filter * -SearchBase “OU=Test,OU=Users,OU=MyBusiness,DC=intern,DC=bbb,DC=local"  
$homedriveLetter = “H:”

foreach ($user in $userbase) {
  $path = \\dc1\usershares\$($user.samaccountname)
  Set-ADUser -Identity $user -HomeDirectory $path -HomeDrive $homedriveLetter
}

Vielleicht möchtest du im Zuge der Ausführung auch gleich die korrekte ACL auf das Homedir setzen, sodass nur der Benutzer selbst das Verzeichnis lesen (und schreiben) kann?
Member: Hendrik2586
Hendrik2586 Dec 06, 2019 at 06:58:04 (UTC)
Goto Top
Zitat von @0x32f1:

Zitat von @Hendrik2586:
$userbase = Get-ADUser -Filter * -SearchBase “OU=Test,OU=Users,OU=MyBusiness,DC=intern,DC=bbb,DC=local"

foreach($user in $userbase){
$path = “\\DC1\Usershares\$env:username” ( %Username% = wenn man es händisch eintragen würde)
$homedriveLetter = “H:”
Set-ADUser -Identity $user -HomeDirectory $path -HomeDrive $homedriveLetter
}


Na, wenn wir schon dabei sind: Kein Grund, $homedriveLetter bei jedem Durchlauf mit dem selben Wert zu überschreiben, oder?

$userbase = Get-ADUser -Filter * -SearchBase “OU=Test,OU=Users,OU=MyBusiness,DC=intern,DC=bbb,DC=local"  
> $homedriveLetter = “H:”
> 
> foreach ($user in $userbase) {
>   $path = \\dc1\usershares\$($user.samaccountname)
>   Set-ADUser -Identity $user -HomeDirectory $path -HomeDrive $homedriveLetter
> }

Vielleicht möchtest du im Zuge der Ausführung auch gleich die korrekte ACL auf das Homedir setzen, sodass nur der Benutzer selbst das Verzeichnis lesen (und schreiben) kann?


Der Code dazu wäre sicher nicht schlecht, geht aber über meine Erfahrungen und Kenntnisse mit PS weit hinaus. Das würde ich dann doch über den Windows Server Manager machen. face-smile
Member: Hendrik2586
Hendrik2586 Dec 06, 2019 at 07:03:30 (UTC)
Goto Top
Zitat von @Hendrik2586:

Zitat von @0x32f1:

Zitat von @Hendrik2586:
$userbase = Get-ADUser -Filter * -SearchBase “OU=Test,OU=Users,OU=MyBusiness,DC=intern,DC=bbb,DC=local"

foreach($user in $userbase){
$path = “\\DC1\Usershares\$env:username” ( %Username% = wenn man es händisch eintragen würde)
$homedriveLetter = “H:”
Set-ADUser -Identity $user -HomeDirectory $path -HomeDrive $homedriveLetter
}


Na, wenn wir schon dabei sind: Kein Grund, $homedriveLetter bei jedem Durchlauf mit dem selben Wert zu überschreiben, oder?

$userbase = Get-ADUser -Filter * -SearchBase “OU=Test,OU=Users,OU=MyBusiness,DC=intern,DC=bbb,DC=local"  
>> $homedriveLetter = “H:”
>> 
>> foreach ($user in $userbase) {
>>   $path = \\dc1\usershares\$($user.samaccountname)
>>   Set-ADUser -Identity $user -HomeDirectory $path -HomeDrive $homedriveLetter
>> }

Vielleicht möchtest du im Zuge der Ausführung auch gleich die korrekte ACL auf das Homedir setzen, sodass nur der Benutzer selbst das Verzeichnis lesen (und schreiben) kann?


Der Code dazu wäre sicher nicht schlecht, geht aber über meine Erfahrungen und Kenntnisse mit PS weit hinaus. Das würde ich dann doch über den Windows Server Manager machen. face-smile



Was ich nun vermisse ist etwas das ich wahrscheinlich falsch verstanden habe. Nun sehe ich wenn ich ein Comman Fenster öffne oder PS und set eingebe, das der Homepath und Letter angepasst wurden. Jedoch sehe ich das er wenn ich das command Fenster öffne auf C zugreift und nicht auf H. Auch sehe ich kein gemapptes Laufwerk H auf dem die User dann ihre Daten sehen.

Das wurde im Vorfeld mal per Skript gemacht, das möchte ich aber ablösen.
Member: erikro
erikro Dec 06, 2019 at 07:35:24 (UTC)
Goto Top
Moin,

Zitat von @Hendrik2586:
Vielleicht möchtest du im Zuge der Ausführung auch gleich die korrekte ACL auf das Homedir setzen, sodass nur der Benutzer selbst das Verzeichnis lesen (und schreiben) kann?


Der Code dazu wäre sicher nicht schlecht, geht aber über meine Erfahrungen und Kenntnisse mit PS weit hinaus. Das würde ich dann doch über den Windows Server Manager machen. face-smile

Guckst Du hier: PowerShell Script ACL entfernen und setzen

hth

Erik
Member: erikro
erikro Dec 06, 2019 at 07:41:10 (UTC)
Goto Top
Moin,

Zitat von @Hendrik2586:
Was ich nun vermisse ist etwas das ich wahrscheinlich falsch verstanden habe. Nun sehe ich wenn ich ein Comman Fenster öffne oder PS und set eingebe, das der Homepath und Letter angepasst wurden.

Dann hat das also geklappt. face-wink

Jedoch sehe ich das er wenn ich das command Fenster öffne auf C zugreift

Das ist so.

und nicht auf H. Auch sehe ich kein gemapptes Laufwerk H auf dem die User dann ihre Daten sehen.

Hast Du denn das LW H: gemappt? Nur weil Du es dem User in die Umgebungsvariablen schreibst, mappt der Client noch nicht das LW. Das musst Du schon auch machen.

hth

Erik
Member: 0x32f1
Solution 0x32f1 Dec 06, 2019 updated at 08:04:53 (UTC)
Goto Top
Zitat von @erikro:
Hast Du denn das LW H: gemappt? Nur weil Du es dem User in die Umgebungsvariablen schreibst, mappt der Client noch nicht das LW. Das musst Du schon auch machen.

Am besten per GPO für alle Nutzer ausrollen:

User Configuration -> Preferences -> Windows Settings -> Drive Maps
Action: Update
Location: \\dc1\usershares\%USERNAME%
Label as: %USERNAME% / oder Label as: Home Drive
Use: H

Fertig.
Member: Hendrik2586
Hendrik2586 Dec 06, 2019 at 08:37:37 (UTC)
Goto Top
Zitat von @0x32f1:

Zitat von @erikro:
Hast Du denn das LW H: gemappt? Nur weil Du es dem User in die Umgebungsvariablen schreibst, mappt der Client noch nicht das LW. Das musst Du schon auch machen.

Am besten per GPO für alle Nutzer ausrollen:

User Configuration -> Preferences -> Windows Settings -> Drive Maps
Action: Update
Location: \\dc1\usershares\%USERNAME%
Label as: %USERNAME% / oder Label as: Home Drive
Use: H

Fertig.


Genau so hab ich es vor 30 MInuten eingerichtet! face-smile Danke für die Bestätigung. face-smile