none
PowerShell HomeDrive ändern Problem RRS feed

  • 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 :)

    Montag, 3. Juni 2019 07:18

Antworten

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


    Montag, 3. Juni 2019 14:38
  • 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

    Dienstag, 4. Juni 2019 08:54
  • 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" |




    Dienstag, 4. Juni 2019 09:26
  • 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.

    Dienstag, 4. Juni 2019 10:31
  • was passiert denn bei der PS Funktion ?

    $server ="\\TESTSERVER"
    $Users
    = Get-ADUser -Filter {Name -like "*MeinSuchMuster*"}

    foreach($User in $Users)
    {
        $Homeshare
    = $server +"\" +$($user.Name)
        write-host $Homeshare
    }


    Klaus

    Dienstag, 4. Juni 2019 11:14
  • 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 ...

    Mittwoch, 5. Juni 2019 06:52
  • Was mir auf Anhieb auffällt ist das Du -Identity $Users schreibst, die Variable in der Schleife aber $user heißt.
    Mittwoch, 5. Juni 2019 07:57
  • 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 ...

    Mittwoch, 5. Juni 2019 11:00
  • 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

    Mittwoch, 5. Juni 2019 15:05
  • 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
    }
    

    Donnerstag, 6. Juni 2019 05:24
  • 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


    Donnerstag, 6. Juni 2019 06:20
  • 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

    Donnerstag, 6. Juni 2019 19:14
  • 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
    Freitag, 7. Juni 2019 10:16