Question Création de groupes avec un fichier CSV (Résolu)

Plus d'informations
il y a 16 ans 8 mois #794 par Jacques Barathon
Il faut transmettre les infos du fichier csv à la boucle foreach. Le moyen le plus courant dans PowerShell c'est de faire un pipeline:

[code:1]
get-content d:\...\...dbo.csv | foreach {
$objOU.Create(\"group\",\"cn=$_\"«»)
}[/code:1]
Comme tu le constates, la principale (sinon la seule) différence avec ton propre code, c'est l'enchaînement entre l'instruction get-content et la boucle foreach symbolisé par le \"|\". Avec ce symbole, chaque objet retourné par get-content (c'est-à-dire chaque ligne du fichier) est passé aux instructions de la boucle foreach. Et comme tu l'avais déjà compris, on y accède par le nom de variable $_.

J'ai également regroupé \"cn=\" et $_ dans une même chaîne de caractères. Quand tu mets une chaîne entre guillemets (doubles), les noms de variables sont convertis en leur valeur avant de passer la chaîne à l'instruction.

Cette conversion n'est pas faite lorsque la chaîne est placée entre apostrophes (ou guillemets simples), comme par exemple:

[code:1]
PS> $world = \"la France\"
PS> \"Hello $world\"
Hello la France
PS> 'Hello $world'
Hello $world[/code:1]
Janel

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

Plus d'informations
il y a 16 ans 8 mois #796 par big_cham
Alors il n'y a aucune différence entre foreach avec un pipe et foreach-object ?

Sinon, voici le résultat en mode intéractif :

distinguishedName


{}
{}
{}
{}


Du coup, pas de groupes...:(
Pourtant si je laisse le get-content seul, j'ai bien l'affichage de toutes les lignes.

Je retire la deuxième partie du message. J'ai oublié le setinfo...

Savez vous pourquoi le nom pre-goup win2000 n'a aucun sens ? Est ce une limitation de powershell et de 2000 ?<br><br>Message édité par: big_cham, à: 1/08/07 09:10

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

Plus d'informations
il y a 16 ans 8 mois #797 par Robin Lemesle

Alors il n'y a aucune différence entre foreach avec un pipe et foreach-object ?


Non, regarde cette commande !

[code:1]get-alias -name foreach[/code:1]

Foreach est un alias de ForeachObject.


Le pipe ne sert juste qu'a envoyer l'objet de sortie vers l'entrée de la commande située après le pipe (Foreach).

Robin MVP PowerShell

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

Plus d'informations
il y a 16 ans 8 mois #798 par big_cham
Ok. Pas d'idée sur mon pre-windows 2000 name ?

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

Plus d'informations
il y a 16 ans 8 mois #799 par Jacques Barathon
robin écrit:

Alors il n'y a aucune différence entre foreach avec un pipe et foreach-object ?


Non, regarde cette commande !

[code:1]get-alias -name foreach[/code:1]

Foreach est un alias de ForeachObject.


Le pipe ne sert juste qu'a envoyer l'objet de sortie vers l'entrée de la commande située après le pipe (Foreach).

Ben, en fait c'est un peu plus compliqué que ça :) et c'est en fait une des ambiguités cachées de PowerShell...

Dans la structure \&quot;commande1 | foreach {faire qq chose avec $_}\&quot;, foreach est bien un alias de la commandelette foreach-object: pour avoir de l'aide sur ce foreach, on peut taper \&quot;help foreach\&quot; ou \&quot;help foreach-object\&quot;.

Mais dans la structure \&quot;foreach ($item in $collection) {faire qq chose avec $item}\&quot;, foreach est un mot-clé de PowerShell: il faut taper \&quot;help about_foreach\&quot; pour avoir une aide complète sur ce mot-clé.

Subtil, non?

Qu'est-ce que ça change, concrètement? Au moins deux choses:

1. Les performances.

Comme déjà évoqué dans un fil précédent, la première structure, \&quot;foreach ($item in $collection) {...}\&quot;, attend d'avoir entièrement collecté $collection avant de passer aux opérations sur chaque $item. A l'inverse, \&quot;commande1 | foreach {...}\&quot; transmet les objets émis par commande1 au bloc d'instructions de foreach au fur et à mesure où ils sont émis. Dans certains cas, cette différence peut se révéler cruciale.

2. La syntaxe.

Avec foreach-object on peut enchaîner des actions \&quot;avant\&quot;, \&quot;pendant\&quot; et \&quot;après\&quot; le traitement des objets:

[code:1]PS&gt; get-process | foreach {\&quot;Liste des process:\&quot;} {$_} {\&quot;`nFin de liste.\&quot;}[/code:1]
Après foreach (ici, l'alias de foreach-object) on peut voir trois blocs d'instructions: le premier qui affiche le texte \&quot;Liste des process:\&quot; sera traité avant de commencer à traiter le premier objet. Le deuxième bloc sera traité pour chaque objet passé par le pipeline. Et pour finir, le troisième bloc sera traité une fois le pipeline vide et le dernier objet traité.

Janel

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

Plus d'informations
il y a 16 ans 8 mois #800 par Jacques Barathon
big_cham écrit:

Savez vous pourquoi le nom pre-goup win2000 n'a aucun sens ? Est ce une limitation de powershell et de 2000 ?


Ce n'est pas une limitation de PowerShell mais une contrainte d'ADSI. Dans ton instruction $objOU.Create(\&quot;group\&quot;, $_) il faut que $_ soit sous la forme d'un Distinguished Name (DN), c'est-à-dire \&quot;CN=mon groupe,OU=mon OU,DC=mondomaine,DC=maboite,DC=com\&quot;.

Il existe des techniques pour interroger un DC en utilisant la forme pré-2000, mais j'ignore si on peut créer un groupe dans une OU en utilisant cette syntaxe. A creuser si tu ne peux pas utiliser le DN, mais à priori rien ne devrait t'en empêcher car tu dois avoir toutes les infos pour le reconstituer.

Janel

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

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