Question
Partager plusieurs Repertoires
- BENALI
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 1
- Remerciements reçus 0
il y a 15 ans 7 mois #7619
par BENALI
Partager plusieurs Repertoires a été créé 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.
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.
- blanc
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 54
- Remerciements reçus 0
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...
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.
- blanc
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 54
- Remerciements reçus 0
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.
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.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 15 ans 7 mois #7627
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Partager plusieurs Repertoires
noel écrit:
noel écrit:
J'aurais plutot dit \"faut commencer par regarder\", tous le pb n'ont pas la même source.
noel écrit:
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
[edit]
Tu as le bouton Editer pour corriger/compléter un post.<br><br>Message édité par: Laurent Dardenne, à: 19/08/10 13:36
Pas forcément, tous ceux qui prennent le temps d'étudier le peuvent.Seul un \"pro\" peut expliquer
noel écrit:
Ce que tu as démontréMoi, je peux juste redire ce qui m'a était dit \"quand ca marche pas, faut regarder les types\".
J'aurais plutot dit \"faut commencer par regarder\", tous le pb n'ont pas la même source.
noel écrit:
Loin de là.En espérant ne pas avoir dit trop de bêtises...
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
[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
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Partager plusieurs Repertoires