none
Ajout en powershell des attributs AD pour les sections TSE RRS feed

  • Question

  • Bonjour messieurs, mesdames

    Depuis peu je me suis pencher sur la création d'un script powershell pour l'import d'utilisateurs depuis un fichiers CSV , avec la création d'OU, et de sous OU.La création du script est quasi final, car je voudrais ajouter les paramètres TSE dans les profil AD créer auparavant.

    J'ai trouver le Script parfait sur internet, seul petit "bémol" je ne sais comment faire remonter l'attribut %username% et la lettre du lecteur, car par défaut il me met la lettre "Z".

    Voici le dit script:

    $TShdValue = "\\Serveur\Partage$\"
    $TSppValue = "\\Serveur\Partage1$"
    $ObjFilter = "(&(objectCategory=person)(objectCategory=User))"
        $objSearch = New-Object System.DirectoryServices.DirectorySearcher
        $objSearch.PageSize = 15000
        $objSearch.Filter = $ObjFilter  
        $objSearch.SearchRoot = "LDAP://OU=$USRACT,OU=$USRSTAND,OU=$USR,OU=$OU,DC=$DC,DC=$DCL"
        $AllObj = $objSearch.FindAll()
        foreach ($Obj in $AllObj)
               {
                $objItemS = $Obj.Properties
                $UserDN = $objItemS.distinguishedname
                $user = [ADSI] "LDAP://$userDN"
                $user.psbase.invokeSet("TerminalServicesProfilePath",$TSppValue)
                $user.psbase.invokeSet("TerminalServicesHomeDirectory",$TShdValue)
                $user.setinfo()
                }

    Si quelqu'un a une solution, je suis largement preneur.

    Script tester sur un 2012R2

    D'avance merci de votre réponse




    mercredi 18 février 2015 08:43

Réponses

Toutes les réponses

  • re bonjour

    je sais que plusieurs DSI parlerons de QuestAD, mais je cherche justement a éviter d’installer un autre soft et surtout devoir refaire tout le script.

    D'avance merci

    mercredi 18 février 2015 15:36
  • Bonjour messieurs, mesdames

    Depuis peu je me suis pencher sur la création d'un script powershell pour l'import d'utilisateurs depuis un fichiers CSV , avec la création d'OU, et de sous OU.La création du script est quasi final, car je voudrais ajouter les paramètres TSE dans les profil AD créer auparavant.

    J'ai trouver le Script parfait sur internet, seul petit "bémol" je ne sais comment faire remonter l'attribut %username% et la lettre du lecteur, car par défaut il me met la lettre "Z".

    Voici le dit script:

    $TShdValue = "\\Serveur\Partage$\"
    $TSppValue = "\\Serveur\Partage1$"
    $ObjFilter = "(&(objectCategory=person)(objectCategory=User))"
        $objSearch = New-Object System.DirectoryServices.DirectorySearcher
        $objSearch.PageSize = 15000
        $objSearch.Filter = $ObjFilter  
        $objSearch.SearchRoot = "LDAP://OU=$USRACT,OU=$USRSTAND,OU=$USR,OU=$OU,DC=$DC,DC=$DCL"
        $AllObj = $objSearch.FindAll()
        foreach ($Obj in $AllObj)
               {
                $objItemS = $Obj.Properties
                $UserDN = $objItemS.distinguishedname
                $user = [ADSI] "LDAP://$userDN"
                $user.psbase.invokeSet("TerminalServicesProfilePath",$TSppValue)
                $user.psbase.invokeSet("TerminalServicesHomeDirectory",$TShdValue)
                $user.setinfo()
                }

    Si quelqu'un a une solution, je suis largement preneur.

    Script tester sur un 2012R2

    D'avance merci de votre réponse


    Bonjour Jonathan,

    Regarde du côté des attributs Homedirectory et HomeDrive. Je pense que ça peut t'aider.


    Blog
    Scripts

    mercredi 18 février 2015 16:29
  • Bonjour Emmanuel

    j'ai regardé a ce niveau, par contre il s'agit d'attribut TSE. les attributs HomeDirectory et Homerive n'y font pas partis...

    Cordialement,

    Jonathan

    jeudi 19 février 2015 10:57
  • salut Emmanuel

    essai ceci :

    $user.psbase.invokeSet("TerminalServicesHomeDrive","Z:")


    vendredi 20 février 2015 13:24
  • Hello

    je viens de tester ton bout de code, nickel sa fonctionne, maintenant me reste plus qu'a trouver comment intégrer le "%USERNAME%"  dans le script pour qu'il créer un dossier par user a l'ouverture de session TSE

    Une Idée?

    Cordialement,

    Jonathan

    lundi 23 février 2015 10:49
  • une solution :

    foreach ($Obj in $AllObj)
            {
            $objItemS = $Obj.Properties
            $UserDN = $objItemS.distinguishedname
            $user = [ADSI] "LDAP://$userDN"
            $dossier = $TShdValue + $Obj.Properties.samaccountname
            $user.psbase.invokeSet("TerminalServicesProfilePath",$TSppValue)
            $user.psbase.invokeSet("TerminalServicesHomeDirectory",$dossier)
            $user.psbase.invokeSet("TerminalServicesHomeDrive","Z:")
            $user.setinfo()
            }


    • Modifié 6ratgus lundi 23 février 2015 11:53
    lundi 23 février 2015 11:52
  • Re,

    La commande powershell ci dessus, est deja dans mon script, par contre cela ne fonctionne pas :(

    need some help xD

    Cordialement

    lundi 23 février 2015 12:30
  • rajoute/modifie ceci :
            $dossier = $TShdValue + $Obj.Properties.samaccountname
            $user.psbase.invokeSet("TerminalServicesHomeDirectory",$dossier)
    

    lundi 23 février 2015 13:26
  • ALORS LA !!!!!!!!!! une vrai machine

    Mille merci !!!!!

    ça marche !

    Merci encore, je peu arrêter de m'arracher les cheveux :D

    maintenant reste plus qu'a modifier tout les scripts pour faire qu'avec des variables est sa sera nickel

    Cordialement.

    lundi 23 février 2015 13:35
  • oups petit soucis, je viens de faire un test sur une maquette, et chose très bizarre, tous mes users on le même chemin profil et base...... vu qu'avant j'avais tester avec un user...

    y'aurait'il une boucle qui prendrais le paramètre de mon derniers user?

    lundi 23 février 2015 14:40
  •  tous mes users on le même chemin profil et base......

    y'aurait'il une boucle qui prendrais le paramètre de mon derniers user?

    sans voir ton nouveau script on peut pas d'aidée !

    lundi 23 février 2015 17:03
  • Hello

    Oui je suis nul excuser moi...

    le voic au complet :

    # !!! Variable a changer en fonction du domaine client !!!
    $OU="CONTOSO"
    $DC="contoso"
    $DCL="local"
    
    # Ne pas toucher !!!!
    $GRP="Groupes"
    $APP="Applications publiées"
    $RES="Ressources"
    $SEC="Sécurité"
    $PART="Partages"
    $GLOB="Globaux"
    $LOCA="Locaux"
    $SERV="Serveurs"
    $RES2="Ressources"
    $CONT="Contacts"
    $IMP="Imprimantes"
    $PC="PC"
    $PORT="Portables Commerciaux"
    $SRVM="Serveurs Membres"
    $SRVAD="Autres Serveurs"
    $SRVTS="Serveurs TSE"
    $USR="Utilisateurs"
    $ADM="Administrateurs"
    $ADMTS="Admins TSE"
    $ADMSOFT="Admins Soft"
    $USRSTAND="Utilisateurs Standards"
    $USRACT="Utilisateurs Actifs"
    $USRINA="Utilisateurs Inactifs"
    $USRTS="Utilisateurs TSE"
    
    # Import du module Active Directory
     Import-Module ActiveDirectory
    
    
    # Création de L'OU principal
    New-ADOrganizationalUnit -ProtectedFromAccidentalDeletion 0 "$OU"
    # Création des sous OU Groupes
    New-ADOrganizationalUnit -ProtectedFromAccidentalDeletion 0 "$GRP" -Path ("OU=$OU,DC=$DC,DC=$DCL")
    # OU Groupes
    New-ADOrganizationalUnit -ProtectedFromAccidentalDeletion 0 "$APP" -Path ("OU=$GRP,OU=$OU,DC=$DC,DC=$DCL")
    New-ADOrganizationalUnit -ProtectedFromAccidentalDeletion 0 "$RES" -Path ("OU=$GRP,OU=$OU,DC=$DC,DC=$DCL")
    New-ADOrganizationalUnit -ProtectedFromAccidentalDeletion 0 "$SEC" -Path ("OU=$GRP,OU=$OU,DC=$DC,DC=$DCL")
    # OU Groupes/Sécurité
    New-ADOrganizationalUnit -ProtectedFromAccidentalDeletion 0 "$PART" -Path ("OU=$SEC,OU=$GRP,OU=$OU,DC=$DC,DC=$DCL")
    New-ADOrganizationalUnit -ProtectedFromAccidentalDeletion 0 "$GLOB" -Path ("OU=$PART,OU=$SEC,OU=$GRP,OU=$OU,DC=$DC,DC=$DCL")
    New-ADOrganizationalUnit -ProtectedFromAccidentalDeletion 0 "$LOCA" -Path ("OU=$PART,OU=$SEC,OU=$GRP,OU=$OU,DC=$DC,DC=$DCL")
    New-ADOrganizationalUnit -ProtectedFromAccidentalDeletion 0 "$SERV" -Path ("OU=$SEC,OU=$GRP,OU=$OU,DC=$DC,DC=$DCL")
    # OU Ressources
    New-ADOrganizationalUnit -ProtectedFromAccidentalDeletion 0 "$RES2" -Path ("OU=$OU,DC=$DC,DC=$DCL")
    # OU Ressources/
    New-ADOrganizationalUnit -ProtectedFromAccidentalDeletion 0 "$CONT" -Path ("OU=$RES2,OU=$OU,DC=$DC,DC=$DCL")
    New-ADOrganizationalUnit -ProtectedFromAccidentalDeletion 0 "$IMP" -Path ("OU=$RES2,OU=$OU,DC=$DC,DC=$DCL")
    New-ADOrganizationalUnit -ProtectedFromAccidentalDeletion 0 "$PC" -Path ("OU=$RES2,OU=$OU,DC=$DC,DC=$DCL")
    # OU Ressources/portables commerciaux
    New-ADOrganizationalUnit -ProtectedFromAccidentalDeletion 0 "$PORT" -Path ("OU=$PC,OU=$RES2,OU=$OU,DC=$DC,DC=$DCL")
    # OU Ressources/Serveurs Membres
    New-ADOrganizationalUnit -ProtectedFromAccidentalDeletion 0 "$SRVM" -Path ("OU=$RES2,OU=$OU,DC=$DC,DC=$DCL")
    New-ADOrganizationalUnit -ProtectedFromAccidentalDeletion 0 "$SRVAD" -Path ("OU=$SRVM,OU=$RES2,OU=$OU,DC=$DC,DC=$DCL")
    New-ADOrganizationalUnit -ProtectedFromAccidentalDeletion 0 "$SRVTS" -Path ("OU=$SRVM,OU=$RES2,OU=$OU,DC=$DC,DC=$DCL")
    # OU Utilisateurs
    New-ADOrganizationalUnit -ProtectedFromAccidentalDeletion 0 "$USR" -Path ("OU=$OU,DC=$DC,DC=$DCL")
    # OU Utilisateurs/
    New-ADOrganizationalUnit -ProtectedFromAccidentalDeletion 0 "$ADM" -Path ("OU=$USR,OU=$OU,DC=$DC,DC=$DCL")
    New-ADOrganizationalUnit -ProtectedFromAccidentalDeletion 0 "$ADMTS" -Path ("OU=$USR,OU=$OU,DC=$DC,DC=$DCL")
    New-ADOrganizationalUnit -ProtectedFromAccidentalDeletion 0 "$ADMSOFT" -Path ("OU=$USR,OU=$OU,DC=$DC,DC=$DCL")
    New-ADOrganizationalUnit -ProtectedFromAccidentalDeletion 0 "$USRSTAND" -Path ("OU=$USR,OU=$OU,DC=$DC,DC=$DCL")
    New-ADOrganizationalUnit -ProtectedFromAccidentalDeletion 0 "$USRTS" -Path ("OU=$USR,OU=$OU,DC=$DC,DC=$DCL")
    # OU Utilisateurs/Utilisateurs standards/
    New-ADOrganizationalUnit -ProtectedFromAccidentalDeletion 0 "$USRACT" -Path ("OU=$USRSTAND,OU=$USR,OU=$OU,DC=$DC,DC=$DCL")
    New-ADOrganizationalUnit -ProtectedFromAccidentalDeletion 0 "$USRINA" -Path ("OU=$USRSTAND,OU=$USR,OU=$OU,DC=$DC,DC=$DCL")
    
    
    ################# Import des Users par rapport au CSV #################
    (Import-Csv .\newsusers.csv -Delimiter ’;’) | foreach-object {
    New-ADUser -Name $_.DisplayName -UserPrincipalName ($_.GivenName.Substring(0,1)+$_.Surname + “@$DC.$DCL”) -SamAccountName ($_.GivenName.Substring(0,1)+$_.Surname) -GivenName $_.GivenName -DisplayName $_.DisplayName -Initials ($_.GivenName.Substring(0,1)+$_.Surname.Substring(0,1)) -SurName $_.Surname -Description $_.description -Path ("OU=$USRACT,OU=$USRSTAND,OU=$USR,OU=$OU,DC=$DC,DC=$DCL") -AccountPassword (ConvertTo-SecureString $_.Password -AsPlainText -force) -Enabled $True -PasswordNeverExpires $True -PassThru -ScriptPath $_.ScriptPath }
    
    
    $TShdValue = "\\DC01\Bases$\"
    $TSppValue = "\\DC01\Profils$\"
    $TSDrives = "X:"
    $DossierBase = $TShdValue + $Obj.Properties.samaccountname
    $DossierProfil = $TSppValue + $Obj.Properties.samaccountname
    $ObjFilter = "(&(objectCategory=person)(objectCategory=User))" 
        $objSearch = New-Object System.DirectoryServices.DirectorySearcher 
        $objSearch.PageSize = 15000 
        $objSearch.Filter = $ObjFilter  
        $objSearch.SearchRoot = "LDAP://OU=$USRACT,OU=$USRSTAND,OU=$USR,OU=$OU,DC=$DC,DC=$DCL" 
        $AllObj = $objSearch.FindAll() 
        foreach ($Obj in $AllObj) 
               {
                $objItemS = $Obj.Properties
                $UserDN = $objItemS.distinguishedname
                $user = [ADSI] "LDAP://$userDN"
                $user.psbase.invokeSet("TerminalServicesProfilePath","$DossierProfil")
                $user.psbase.invokeSet("TerminalServicesHomeDirectory","$DossierBase")
                $user.psbase.invokeSet("TerminalServicesHomeDrive","$TSDrives")
                $user.setinfo() 
                }


    mardi 24 février 2015 07:29
  • tu a un petit problème avec $DossierBase et aussi $DossierProfil 

    il faut les initialisées dans la boucle foreach  sinon elle ne prendront pas les valeurs de $Obj....

    mardi 24 février 2015 11:35
  • hello

    Je viens de faire la modification dans le SCRIPT, est cela fonctionne :D

    Merci pour le soutien

    Cordialement.

    mardi 24 février 2015 13:37