Question Partager plusieurs Repertoires

Plus d'informations
il y a 15 ans 7 mois #7619 par BENALI
Bonjour,

Voila mon probleme:
Je suis en train de creer un script pour automatiser la creation d'utilisateurs AD avec Powershell.

D'abord, j'ai cree les fichiers d'infos CSV.
Ensuite j'ai cree un fichier avec les cmdlet pour creer les UO, les Groupes, les Utilisateurs, Déplacer les Users dans les Groupes et enfin creer les repertoire personels de chaque utilisateur.

Voila le script:
#Creation des UO:
Import-Csv -Path 'D:\UOs.csv' -Delimiter ';' | foreach {New-ADOrganizationalUnit -Name $_.Name -DisplayName $_.DisplayName -ProtectedFromAccidentalDeletion $true -Path $_.Path -Description $_.Description}

#Creation des groupes:
Import-Csv -Path 'D:\Groups.csv' -Delimiter ';' | foreach {New-ADGroup -Name $_.Name -DisplayName $_.DisplayName -SamAccountName $_.SamAccountName -Description $_.Description -GroupCategory $_.GroupCategory -GroupScope $_.GroupScope -Path $_.Path}

#Creation des Users:
Import-Csv -Path 'D:\Users.csv' -Delimiter ';' | foreach {New-ADUser -Name $_.Name -AccountPassword (ConvertTo-SecureString -AsPlainText $_.AccountPassword -Force) -CannotChangePassword $true -City $_.City -Company $_.Company -Country Fr -Department $_.Department -DisplayName $_.DisplayName -EmailAddress $_.EmailAddress -Enabled $true -Fax $_.Fax -GivenName $_.GivenName -HomeDirectory $_.HomeDirectory -HomeDrive $_.HomeDrive -HomePhone $_.HomePhone -Initials $_.Initials -LogonWorkstations $_.LogonWorkstations -MobilePhone $_.MobilePhone -OfficePhone $_.OfficePhone -PasswordNeverExpires $true -Path $_.Path -PostalCode $_.PostalCode -SamAccountName $_.SamAccountName -State $_.State -Streetaddress $_.Streetaddress -Surname $_.Surname -Title $_.Title -UserPrincipalName $_.UserPrincipalName -ScriptPath $_.ScriptPath}

#Deplacement des Users dans les groupes:
Get-ADUser -Filter {Department -eq 'Travaux'} | ForEach-Object {Add-ADGroupMember -Identity 'Travaux' -Members $_}
Get-ADUser -Filter {Department -eq 'Administratif'} | ForEach-Object {Add-ADGroupMember -Identity 'Administratif' -Members $_}
Get-ADUser -Filter {Department -eq 'Comptabilite'} | ForEach-Object {Add-ADGroupMember -Identity 'Comptabilite' -Members $_}
Get-ADUser -Filter {Department -eq 'Direction'} | ForEach-Object {Add-ADGroupMember -Identity 'Direction' -Members $_}
Get-ADUser -Filter {Department -eq 'Etude de Prix'} | ForEach-Object {Add-ADGroupMember -Identity 'Etude de Prix' -Members $_}
Get-ADUser -Filter {Department -eq 'QSE'} | ForEach-Object {Add-ADGroupMember -Identity 'QSE' -Members $_}
Get-ADUser -Filter {Department -eq 'Informatique'} | ForEach-Object {Add-ADGroupMember -Identity 'Informatique' -Members $_}
Get-ADUser -Filter {Department -eq 'Informatique'} | ForEach-Object {Add-ADGroupMember -Identity 'Administrateurs' -Members $_}
Get-ADUser -Filter {Department -eq 'Informatique'} | ForEach-Object {Add-ADGroupMember -Identity \"Administrateurs de l’entreprise\" -Members $_}
Get-ADUser -Filter {Department -eq 'Informatique'} | ForEach-Object {Add-ADGroupMember -Identity 'Administrateurs du schéma' -Members $_}
Get-ADUser -Filter {Department -eq 'Informatique'} | ForEach-Object {Add-ADGroupMember -Identity 'Admins du domaine' -Members $_}
Get-ADUser -Filter {Department -eq 'Informatique'} | ForEach-Object {Add-ADGroupMember -Identity 'Propriétaires créateurs de la stratégie de groupe' -Members $_}

#Creation des repertoires utilisateurs:
Import-Csv -Path 'D:\Users.csv' -Delimiter ';' | foreach {New-Item -Path $_.NewItem -Type Directory}


La prochaine etape est la configuration du partage et des ACLs des repertoires utilisateurs.
J'ai bien la cmd pour le faire un par un:
net share BHO=D:\DossiersUtilisateurs\BHO /UNLIMITED \"/GRANT:Tout le monde,FULL\"
Mais je souhaiterai le faire en une seule fois.Sachant que le nom_partage (BHO) correspond a ma variable $_.SamAccountName de mon fichier Users.csv et que le chemin d'acces (D:\DossiersUtilisateurs\BHO) correspond a la variable $_.NewItem de mon fichier Users.csv.

J'ai essaye d'extraire ces 2 donnes dans des variables $a et $b et de les mettre dans la cmd Net Share mais sa marche pas:
PS C:\Users\JBE> $a=Import-Csv -Path 'D:\Users.csv' -Delimiter ';' | FT SamAccountName
PS C:\Users\JBE> $b=Import-Csv -Path 'D:\Users.csv' -Delimiter ';' | FT NewItem
PS C:\Users\JBE> echo $a

SamAccountName
BHO
DHO
FLE
GCA
GTH
JDO
PGU
RBR
VBU
JBE
PAL
VCO

PS C:\Users\JBE> echo $b

NewItem
D:\DossiersUtilisateurs\BHO
D:\DossiersUtilisateurs\DHO
D:\DossiersUtilisateurs\FLE
D:\DossiersUtilisateurs\GCA
D:\DossiersUtilisateurs\GTH
D:\DossiersUtilisateurs\JDO
D:\DossiersUtilisateurs\PGU
D:\DossiersUtilisateurs\RBR
D:\DossiersUtilisateurs\VBU
D:\DossiersUtilisateurs\JBE-PAL-VCO
D:\DossiersUtilisateurs\JBE-PAL-VCO
D:\DossiersUtilisateurs\JBE-PAL-VCO

PS C:\Users\JBE> net share $a=$b /UNLIMITED \"/GRANT:Tout le monde,FULL\"
Ca me met une erreurs de syntaxe.

Voila, si quelqu'un a une idée, je suis preneur.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 15 ans 7 mois #7621 par blanc
Réponse de blanc sur le sujet Re:Partager plusieurs Repertoires
Bonsoir,
Je me permets un début de piste...
C'est peut être juste un soucis avec les types d'objet.
Je me crée un fichier cvs avec je l'espère la même structure que d:users.csv
[code:1](\"SamAccountName;NewItem\",\"u_toto;c:\toto\", \"u_tutu;c:\tutu\"«») | out-file c:\tmp\test.txt.txt[/code:1]
Il me semble que le type d'un objet traiter par FT est complexe et est loin du type string ou tableau de string. Pour le vérifier :
[code:1]
$o=Import-Csv -Path 'c:\tmp\test.txt.txt' -Delimiter ';' | ft SamAccountName
$o.gettype()

IsPublic IsSerial Name BaseType

----
True True Object[] System.Array
[/code:1]
c'est une tableau d'objets. Mais de quel type ?
Pour le savoir on peut demander le type du premier élément du tableau
$o[0].gettype()

IsPublic IsSerial Name BaseType

----
False False FormatStartData Microsoft.PowerShell.Commands.Internal.Format.StartData

De connaître les membres de cet objet avec $o[0] | gm n'apporte rien de plus quant à la manière d'utiliser l'objet.

Comme lors de la création des répertoires des utilisateurs, on peut envoyer les éléments de l'objet \"résultat de l'import\" dans le pipe :
[code:1]
Import-Csv -Path 'c:\tmp\test.txt.txt' -Delimiter ';' | foreach{ $_.SamAccountName}
u_toto
u_tutu[/code:1]

Pour vérifier que le type est bien une \"string\"
[code:1]
$u=Import-Csv -Path 'c:\tmp\test.txt.txt' -Delimiter ';' | foreach{ $_.SamAccountName}
$u[0].gettype()

IsPublic IsSerial Name BaseType

----
True True String System.Object[/code:1]

On a bien une string
$u[0]
u_toto

Donc :
[code:1]
Import-Csv -Path 'c:\tmp\test.txt.txt' -Delimiter ';' | foreach{ net share $_.SamAccountName=$_newitem /UNLIMITED \"/GRANT:Tout le monde,FULL\"}[/code:1]
je n'ai pas lancé la comande final sur mon poste xp. Alors il reste peut être un soucis avec les doubles quotes ou avec le contenu des variables
Je n'ai fait qu'un affichage de la commande (et non l'envoi de la commmande) avec :
[code:1]
Import-Csv -Path 'c:\tmp\test.txt.txt' -Delimiter ';' | foreach{ \"net share $($_.SamAccountName)=$($_.NewItem) /UNLIMITED `\"/GRANT:Tout le monde,FULL`\"\"}
net share u_toto=c:\toto /UNLIMITED \"/GRANT:Tout le monde,FULL\"
net share u_tutu=c:\tutu /UNLIMITED \"/GRANT:Tout le monde,FULL\"[/code:1]
Et là il faut mettre des doubles quotes en début et fin pour délimiter une chaîne, des $ devant les variables, et utiliser le caractère altgr7 pour que les doubles quotes du texte ne soit pas interpréter .
Donc reste à \"touiller la sauce\" car je ne maîtrise pas du tout la recette.
Seul un \"pro\" peut expliquer le pipeline, les types et pourquoi ca ne marchait pas. Moi, je peux juste redire ce qui m'a était dit \"quand ca marche pas, faut regarder les types\".
En espérant ne pas avoir dit trop de bêtises...

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 15 ans 7 mois #7622 par blanc
Réponse de blanc sur le sujet Re:Partager plusieurs Repertoires
powershell-scripting.com/components/com_...d/emoticons/sick.png
Vert de honte !
Même avec mes lunettes, j'ai confondu \"soumettre\" et \"visualiser\" et je ne peux donc pas corriger les fautes d'orthographe et les accords des participes qui peuvent compliquer la lecture.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 15 ans 7 mois #7627 par Laurent Dardenne
noel écrit:

Seul un \"pro\" peut expliquer

Pas forcément, tous ceux qui prennent le temps d'étudier le peuvent.
noel écrit:

Moi, je peux juste redire ce qui m'a était dit \"quand ca marche pas, faut regarder les types\".

Ce que tu as démontré :P
J'aurais plutot dit \"faut commencer par regarder\", tous le pb n'ont pas la même source.
noel écrit:

En espérant ne pas avoir dit trop de bêtises...

Loin de là.
Sans me lancer dans un plaidoyer pour le droit à l'erreur, le pb n'est pas d'en dire, mais de reconnaître qu'on a pu en dire :whistle:

[edit]
Tu as le bouton Editer pour corriger/compléter un post.<br><br>Message édité par: Laurent Dardenne, à: 19/08/10 13:36

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.041 secondes
Propulsé par Kunena