Question
[Résolu] Ajout d'utilisateurs dans le groupe RDP
- Justin
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 3
- Remerciements reçus 0
il y a 15 ans 4 mois #8507
par Justin
[Résolu] Ajout d'utilisateurs dans le groupe RDP a été créé par Justin
Bonjour,
Tout d'abord merci à ce site et forum d'exister.
J'ai pu ainsi m'initier au powershell mais la je seche
Je suis sur que c'est tout con mais je ne trouve pas
Je souhaite ajouter dans le groupe RDP en local des machines un groupe LDAP (rdp_prod).
Le nom des machines est importé depuis un fichier csv.
Le fichier (rdpprod.csv) dispose d'un nom de colonne = Hostname et les noms des machines sont en colonnes
Voici mon scipt
[code:1]$computer = import-csv -path c:\rdpprod.csv
([ADSI]\"WinNT://$computer/Remote Desktop Users,group\"«»).add(\"WinNT://mondomain/rdp_prod\"«»)[/code:1]
D'avance merci
Message édité par: justin, à: 5/01/11 14:36
Message édité par: justin, à: 5/01/11 14:41
Message édité par: justin, à: 6/01/11 10:03<br><br>Message édité par: Arnaud, à: 11/01/11 00:56
Tout d'abord merci à ce site et forum d'exister.
J'ai pu ainsi m'initier au powershell mais la je seche
Je suis sur que c'est tout con mais je ne trouve pas
Je souhaite ajouter dans le groupe RDP en local des machines un groupe LDAP (rdp_prod).
Le nom des machines est importé depuis un fichier csv.
Le fichier (rdpprod.csv) dispose d'un nom de colonne = Hostname et les noms des machines sont en colonnes
Voici mon scipt
[code:1]$computer = import-csv -path c:\rdpprod.csv
([ADSI]\"WinNT://$computer/Remote Desktop Users,group\"«»).add(\"WinNT://mondomain/rdp_prod\"«»)[/code:1]
D'avance merci
Message édité par: justin, à: 5/01/11 14:36
Message édité par: justin, à: 5/01/11 14:41
Message édité par: justin, à: 6/01/11 10:03<br><br>Message édité par: Arnaud, à: 11/01/11 00:56
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 4 mois #8508
par blanc
Réponse de blanc sur le sujet Re:Import fichier csv
bonsoir,
Je débute aussi...
L'emploi de la variable $computer, et donc la structure du fichier csv que je ne peux qu'imaginer, me surprend.
Si j'ai bien compris le rôle des fichiers csv, c'est que chaque colonne correspond à une propriété et chaque ligne à autant d'instance de la (ou des) propriété(s).
Le fichier devrait, à mon avis mais cela n'engage que moi, ressembler à ceci :
Hostname
MachineToto
MachineTiti
car il n'y a qu'une seule propriété.
S'il y avait 2 propriétés, par exemple l'ip en plus, cela pourrait donner :
Hostname IP
MachineToto 10.216.0.3
MachineTiti 10.216.0.4
Je génère le fichier avec une seule propriété ainsi pour le test (mais le seconde ne gênerait en rien le script car elle n'y est simplement pas exploitée, ce qui permet de reprendre les même fichiers en entrée mais pour d'autres buts, longue digression inutile peut être):
[code:1]
sc -path \"C:\rdpprod.csv\" -value Hostname, MachineToto, MachineTiti[/code:1]
En supposant que l'on dispose d'un fichier d'une telle structure, alors je ferais:
[code:1]$computers = import-csv -path \"C:\rdpprod.csv\"
$computers[/code:1]
Et pour exploiter la variable $computers qui contient toutes les machines :
[code:1]
$computers | foreach {\"AAAAA$($_.Hostname)BBBB\"}[/code:1]
ce qui envoie le contenu de $computers ligne par ligne dans le pipeline, le foreach lit un à un toutes ces lignes et le code entre accolades exploite la propriété Hostname et donc on envoie le nom des machine un par un dans la commande suivante, ici un simple affichage entre des A et des B.
Mais si la commande ADSI est la bonne faut juste faire le bon remplacement, quelque chose comme :
[code:1]$computers | foreach { [ADSI]\"WinNT://$($_.Hostname)/Remote Desktop Users,group\"«»).add(\"WinNT://mondomain/rdp_prod\" }[/code:1]
Mais je n'ai pas de domaine pour vérifier la commande ADSI et je reste admiratif devant tant de concision.
En espérant avoir compris ce que tu voulais faire... Sinon oublie et ne m'en veut pas, je débute aussi.
Je débute aussi...
L'emploi de la variable $computer, et donc la structure du fichier csv que je ne peux qu'imaginer, me surprend.
Si j'ai bien compris le rôle des fichiers csv, c'est que chaque colonne correspond à une propriété et chaque ligne à autant d'instance de la (ou des) propriété(s).
Le fichier devrait, à mon avis mais cela n'engage que moi, ressembler à ceci :
Hostname
MachineToto
MachineTiti
car il n'y a qu'une seule propriété.
S'il y avait 2 propriétés, par exemple l'ip en plus, cela pourrait donner :
Hostname IP
MachineToto 10.216.0.3
MachineTiti 10.216.0.4
Je génère le fichier avec une seule propriété ainsi pour le test (mais le seconde ne gênerait en rien le script car elle n'y est simplement pas exploitée, ce qui permet de reprendre les même fichiers en entrée mais pour d'autres buts, longue digression inutile peut être):
[code:1]
sc -path \"C:\rdpprod.csv\" -value Hostname, MachineToto, MachineTiti[/code:1]
En supposant que l'on dispose d'un fichier d'une telle structure, alors je ferais:
[code:1]$computers = import-csv -path \"C:\rdpprod.csv\"
$computers[/code:1]
Et pour exploiter la variable $computers qui contient toutes les machines :
[code:1]
$computers | foreach {\"AAAAA$($_.Hostname)BBBB\"}[/code:1]
ce qui envoie le contenu de $computers ligne par ligne dans le pipeline, le foreach lit un à un toutes ces lignes et le code entre accolades exploite la propriété Hostname et donc on envoie le nom des machine un par un dans la commande suivante, ici un simple affichage entre des A et des B.
Mais si la commande ADSI est la bonne faut juste faire le bon remplacement, quelque chose comme :
[code:1]$computers | foreach { [ADSI]\"WinNT://$($_.Hostname)/Remote Desktop Users,group\"«»).add(\"WinNT://mondomain/rdp_prod\" }[/code:1]
Mais je n'ai pas de domaine pour vérifier la commande ADSI et je reste admiratif devant tant de concision.
En espérant avoir compris ce que tu voulais faire... Sinon oublie et ne m'en veut pas, je débute aussi.
Connexion ou Créer un compte pour participer à la conversation.
- Justin
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 3
- Remerciements reçus 0
il y a 15 ans 4 mois #8510
par Justin
Réponse de Justin sur le sujet Re:Import fichier csv
Tout d'abord merci pour ton aide, tu avais bien compris ma demande
L'import du fichier est bien en colonne avec le hostname au debut comme écris ci dessus
Je confirme aussi que la commande ADSI fonctionne comme cela :
[code:1]([ADSI]\"WinNT://monpc/Remote Desktop Users,group\").add(\"WinNT://mondomain/monuser\")[/code:1]
Le but étant d'importer une liste de pc pour pouvoir appliquer cette action sur l'ensemble d'un parc
Voici la syntaxe dans sa globalité
J'ai rajouté les parenthèses qu'il manquait et ca fonctionne ... qu'à moitié
[code:1]$computers = import-csv -path \"C:\rdpprod.csv\"
$computers | foreach { ([ADSI]\"WinNT://$($_.Hostname)/Remote Desktop Users,group\").add(\"WinNT://mondomain/rdp_prod\") }
[/code:1]
Le poste \"machinetoto\" hérite de l'information et ajoute \"rdp_prod\" au groupe local.
mais le script ne boucle pas et le poste \"machinetiti\" n'hérite pas de l'information
Il doit y avoir une boucle a faire ... ?<br><br>Message édité par: justin, à: 6/01/11 10:22
L'import du fichier est bien en colonne avec le hostname au debut comme écris ci dessus
Je confirme aussi que la commande ADSI fonctionne comme cela :
[code:1]([ADSI]\"WinNT://monpc/Remote Desktop Users,group\").add(\"WinNT://mondomain/monuser\")[/code:1]
Le but étant d'importer une liste de pc pour pouvoir appliquer cette action sur l'ensemble d'un parc
Voici la syntaxe dans sa globalité
J'ai rajouté les parenthèses qu'il manquait et ca fonctionne ... qu'à moitié
[code:1]$computers = import-csv -path \"C:\rdpprod.csv\"
$computers | foreach { ([ADSI]\"WinNT://$($_.Hostname)/Remote Desktop Users,group\").add(\"WinNT://mondomain/rdp_prod\") }
[/code:1]
Le poste \"machinetoto\" hérite de l'information et ajoute \"rdp_prod\" au groupe local.
mais le script ne boucle pas et le poste \"machinetiti\" n'hérite pas de l'information
Il doit y avoir une boucle a faire ... ?<br><br>Message édité par: justin, à: 6/01/11 10:22
Connexion ou Créer un compte pour participer à la conversation.
- Arnaud Petitjean
-
- Hors Ligne
- Modérateur
-
il y a 15 ans 4 mois #8518
par Arnaud Petitjean
MVP PowerShell et créateur de ce magnifique forum
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?
Réponse de Arnaud Petitjean sur le sujet Re:Import fichier csv
Bonsoir Justin,
Sois le bienvenu dans le forum
!
Quel est le séparateur de champs dans ton fichier CSV ? Si tu ne précise pas le paramètre -Delimiter à la commandelette Import-CSV celle-ci le choisit par défaut.
Autrement dit, si tu utilises un autre délimiteur de champ, précise le au paramètre Delimiter.
La plupart des problèmes liés aux fichiers CSV vient de là...
Bon apprentissage,
Arnaud
Sois le bienvenu dans le forum
Quel est le séparateur de champs dans ton fichier CSV ? Si tu ne précise pas le paramètre -Delimiter à la commandelette Import-CSV celle-ci le choisit par défaut.
Autrement dit, si tu utilises un autre délimiteur de champ, précise le au paramètre Delimiter.
La plupart des problèmes liés aux fichiers CSV vient de là...
Bon apprentissage,
Arnaud
MVP PowerShell et créateur de ce magnifique forum
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?
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 4 mois #8521
par blanc
Réponse de blanc sur le sujet Re:Import fichier csv
heuuu, question de débutant...
et si tu fais juste :
$computers | foreach {\"AAAAA$($_.Hostname)BBBB\"}
vois tu bien toutes tes machines?
Si l'affichage n'est pas correct, le format du fichier est peut être en cause. Mais s'il se correct, c'est peut être du côté de la machine distante (droit...).
Je ne sais d'ailleurs pas comment on récupère les erreurs ADSI.
nota : C'est vrai que mon exemple de fichier csv avec hostname et ip manquait de vérification de ma part.
nota encore :
je relance les lignes suivantes avec un fichier avec une seule colonne
[code:1]PS C:\> $c =import-csv -path \"C:\rdpprod.csv\"
PS C:\> $c
Hostname
MachineToto
MachineTiti
PS C:\> $c | gm
TypeName: System.Management.Automation.PSCustomObject
Name MemberType Definition
----
Equals Method bool Equals(System.Object obj)
GetHashCode Method int GetHashCode()
GetType Method type GetType()
ToString Method string ToString()
Hostname NoteProperty System.String Hostname=MachineToto
PS C:\> $s = gc -path \"C:\rdpprod.csv\"
PS C:\> $s
Hostname
MachineToto
MachineTiti
PS C:\> $s | gm
TypeName: System.String
...
PS C:\> $c | foreach {\"aa$($_.hostname)bb\"}
aaMachineTotobb
aaMachineTitibb[/code:1]
Et le foreach énumère bien les objets. Le contrôle des types aide bien à l'investigation.
Salutation.
et si tu fais juste :
$computers | foreach {\"AAAAA$($_.Hostname)BBBB\"}
vois tu bien toutes tes machines?
Si l'affichage n'est pas correct, le format du fichier est peut être en cause. Mais s'il se correct, c'est peut être du côté de la machine distante (droit...).
Je ne sais d'ailleurs pas comment on récupère les erreurs ADSI.
nota : C'est vrai que mon exemple de fichier csv avec hostname et ip manquait de vérification de ma part.
nota encore :
je relance les lignes suivantes avec un fichier avec une seule colonne
[code:1]PS C:\> $c =import-csv -path \"C:\rdpprod.csv\"
PS C:\> $c
Hostname
MachineToto
MachineTiti
PS C:\> $c | gm
TypeName: System.Management.Automation.PSCustomObject
Name MemberType Definition
----
Equals Method bool Equals(System.Object obj)
GetHashCode Method int GetHashCode()
GetType Method type GetType()
ToString Method string ToString()
Hostname NoteProperty System.String Hostname=MachineToto
PS C:\> $s = gc -path \"C:\rdpprod.csv\"
PS C:\> $s
Hostname
MachineToto
MachineTiti
PS C:\> $s | gm
TypeName: System.String
...
PS C:\> $c | foreach {\"aa$($_.hostname)bb\"}
aaMachineTotobb
aaMachineTitibb[/code:1]
Et le foreach énumère bien les objets. Le contrôle des types aide bien à l'investigation.
Salutation.
Connexion ou Créer un compte pour participer à la conversation.
- Justin
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 3
- Remerciements reçus 0
il y a 15 ans 4 mois #8534
par Justin
Réponse de Justin sur le sujet Re:Import fichier csv
Arnaud écrit:
Le délimiteur était la virgule, j'ai fait des tests avec et sans délimiteur
Suite à l'information de Noel, j'ai d'abord testé comment il affichait ma requete foreach.
J'avais des erreurs a ce niveau la et des que j'ai resolu ce soucis, ca a fonctionné
Du coup, j'ai amelioré le script pour que toutes les informations soient des variables et que d'autres puissent s'en servir
[code:1]
$fichier = import-csv -path \"c:\monfichier.csv\" -delimiter \";\"
$domain = \"mondomain\"
$nameaddgroupqual = \"RDP_Qual\"
$nameaddgrouppreprod = \"RDP_Preprod\"
$nameaddgroupprod = \"RDP_Prod\"
$namegroup = \"remote desktop users\"
foreach ($computer in $fichier)
{
write-host \"$($computer.hostname)\" \"$($computer.environnement)\" \"$($computer.type)\"
if ($computer.environnement -eq \"Qualification\"«»)
{ ([ADSI]\"WinNT://$($computer.hostname)/$namegroup,group\"«»).add(\"WinNT://$domain/$nameaddgroupqual\"«»)
write-host \"Ok\"}
if ($computer.environnement -eq \"Pré-production\"«»)
{ ([ADSI]\"WinNT://$($computer.hostname)/$namegroup,group\"«»).add(\"WinNT://$domain/$nameaddgrouppreprod\"«»)
write-host \"Ok\"}
if ($computer.environnement -eq \"Production\"«»)
{ ([ADSI]\"WinNT://$($computer.hostname)/$namegroup,group\"«»).add(\"WinNT://$domain/$nameaddgroupprod\"«»)
write-host \"Ok\"}
}[/code:1]
Merci pour votre aide
Quel est le séparateur de champs dans ton fichier CSV ? Si tu ne précise pas le paramètre -Delimiter à la commandelette Import-CSV celle-ci le choisit par défaut.
Le délimiteur était la virgule, j'ai fait des tests avec et sans délimiteur
Suite à l'information de Noel, j'ai d'abord testé comment il affichait ma requete foreach.
J'avais des erreurs a ce niveau la et des que j'ai resolu ce soucis, ca a fonctionné
Du coup, j'ai amelioré le script pour que toutes les informations soient des variables et que d'autres puissent s'en servir
[code:1]
$fichier = import-csv -path \"c:\monfichier.csv\" -delimiter \";\"
$domain = \"mondomain\"
$nameaddgroupqual = \"RDP_Qual\"
$nameaddgrouppreprod = \"RDP_Preprod\"
$nameaddgroupprod = \"RDP_Prod\"
$namegroup = \"remote desktop users\"
foreach ($computer in $fichier)
{
write-host \"$($computer.hostname)\" \"$($computer.environnement)\" \"$($computer.type)\"
if ($computer.environnement -eq \"Qualification\"«»)
{ ([ADSI]\"WinNT://$($computer.hostname)/$namegroup,group\"«»).add(\"WinNT://$domain/$nameaddgroupqual\"«»)
write-host \"Ok\"}
if ($computer.environnement -eq \"Pré-production\"«»)
{ ([ADSI]\"WinNT://$($computer.hostname)/$namegroup,group\"«»).add(\"WinNT://$domain/$nameaddgrouppreprod\"«»)
write-host \"Ok\"}
if ($computer.environnement -eq \"Production\"«»)
{ ([ADSI]\"WinNT://$($computer.hostname)/$namegroup,group\"«»).add(\"WinNT://$domain/$nameaddgroupprod\"«»)
write-host \"Ok\"}
}[/code:1]
Merci pour votre aide
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
- [Résolu] Ajout d'utilisateurs dans le groupe RDP