Question [Résolu] Ajout d'utilisateurs dans le groupe RDP

Plus d'informations
il y a 15 ans 4 mois #8507 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

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

Plus d'informations
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 \&quot;C:\rdpprod.csv\&quot; -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 \&quot;C:\rdpprod.csv\&quot;
$computers[/code:1]
Et pour exploiter la variable $computers qui contient toutes les machines :
[code:1]
$computers | foreach {\&quot;AAAAA$($_.Hostname)BBBB\&quot;}[/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]\&quot;WinNT://$($_.Hostname)/Remote Desktop Users,group\&quot;«»).add(\&quot;WinNT://mondomain/rdp_prod\&quot; }[/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.

Plus d'informations
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]\&quot;WinNT://monpc/Remote Desktop Users,group\&quot;).add(\&quot;WinNT://mondomain/monuser\&quot;)[/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 \&quot;C:\rdpprod.csv\&quot;
$computers | foreach { ([ADSI]\&quot;WinNT://$($_.Hostname)/Remote Desktop Users,group\&quot;).add(\&quot;WinNT://mondomain/rdp_prod\&quot;) }
[/code:1]

Le poste \&quot;machinetoto\&quot; hérite de l'information et ajoute \&quot;rdp_prod\&quot; au groupe local.
mais le script ne boucle pas et le poste \&quot;machinetiti\&quot; 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.

Plus d'informations
il y a 15 ans 4 mois #8518 par Arnaud Petitjean
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

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.

Plus d'informations
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 {\&quot;AAAAA$($_.Hostname)BBBB\&quot;}
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:\&gt; $c =import-csv -path \&quot;C:\rdpprod.csv\&quot;
PS C:\&gt; $c

Hostname
MachineToto
MachineTiti

PS C:\&gt; $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:\&gt; $s = gc -path \&quot;C:\rdpprod.csv\&quot;
PS C:\&gt; $s
Hostname
MachineToto
MachineTiti
PS C:\&gt; $s | gm
TypeName: System.String
...

PS C:\&gt; $c | foreach {\&quot;aa$($_.hostname)bb\&quot;}
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.

Plus d'informations
il y a 15 ans 4 mois #8534 par Justin
Réponse de Justin sur le sujet Re:Import fichier csv
Arnaud écrit:

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 \&quot;c:\monfichier.csv\&quot; -delimiter \&quot;;\&quot;

$domain = \&quot;mondomain\&quot;
$nameaddgroupqual = \&quot;RDP_Qual\&quot;
$nameaddgrouppreprod = \&quot;RDP_Preprod\&quot;
$nameaddgroupprod = \&quot;RDP_Prod\&quot;
$namegroup = \&quot;remote desktop users\&quot;


foreach ($computer in $fichier)
{

write-host \&quot;$($computer.hostname)\&quot; \&quot;$($computer.environnement)\&quot; \&quot;$($computer.type)\&quot;

if ($computer.environnement -eq \&quot;Qualification\&quot;«»)
{ ([ADSI]\&quot;WinNT://$($computer.hostname)/$namegroup,group\&quot;«»).add(\&quot;WinNT://$domain/$nameaddgroupqual\&quot;«»)
write-host \&quot;Ok\&quot;}


if ($computer.environnement -eq \&quot;Pré-production\&quot;«»)
{ ([ADSI]\&quot;WinNT://$($computer.hostname)/$namegroup,group\&quot;«»).add(\&quot;WinNT://$domain/$nameaddgrouppreprod\&quot;«»)
write-host \&quot;Ok\&quot;}


if ($computer.environnement -eq \&quot;Production\&quot;«»)
{ ([ADSI]\&quot;WinNT://$($computer.hostname)/$namegroup,group\&quot;«»).add(\&quot;WinNT://$domain/$nameaddgroupprod\&quot;«»)
write-host \&quot;Ok\&quot;}

}[/code:1]

Merci pour votre aide :P

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

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