Question Script de masse
- corny
- Auteur du sujet
- Hors Ligne
- Membre junior
-
Réduire
Plus d'informations
- Messages : 38
- Remerciements reçus 0
il y a 14 ans 11 mois #8025
par corny
Script de masse a été créé par corny
Bonjour,
Voici deux scripts qui fonctionnent très bien indépendamment.
Le 1er tout le monde connait donc je passe.
Le second script, extrait à distance,chaque user de l'OU spécifiée (Sauf PDC). Mon problème est que je ne parviens pas à fusionner les deux (Exécuter mon script depuis une liste de serveurs en csv
Info : il faut obligatoirement que WinRm soit installé sur chaque serveur pour que cela fonctionne.
Quelqu'un peut il éclairer ma lanterne car ca urge grave ? Merci d'avance
#############################
#Import-csv
$Computername = get-content c:\Computersupdate.txt
foreach ($line in $data)
{
write-host $line.GrpName $line.Desc $line.GrpType $line.DN
}
$Computername
#Fin d'import
#############################
#Script
$Computername = Read-Host \"Entrer le nom du Serveur\"
$localgroupName = Read-Host \"Entrer le nom du groupe locale\"
if ($computerName -eq \"\") {$computerName = \"$env:computername\"}
If([ADSI]::Exists(\"WinNT://$computerName/$localGroupName,group\"))
{
$group = [ADSI](\"WinNT://$computerName/$localGroupName,group\")
}
$members = @()
$Group.Members() |
% {
$AdsPath = $_.GetType().InvokeMember(\"Adspath\", 'GetProperty', $null, $_, $null)
# Domain members will have an ADSPath like WinNT://DomainName/UserName.
# Local accounts will have a value like WinNT://DomainName/ComputerName/UserName.
$a = $AdsPath.split('/',[StringSplitOptions]::RemoveEmptyEntries)
$name = $a[-1]
$domain = $a[-2]
$class = $_.GetType().InvokeMember(\"Class\", 'GetProperty', $null, $_, $null)
$member = New-Object PSObject
$member | Add-Member -MemberType NoteProperty -Name \"Name\" -Value $name
$member | Add-Member -MemberType NoteProperty -Name \"Domain\" -Value $domain
$member | Add-Member -MemberType NoteProperty -Name \"Class\" -Value $class
$members += $member
}
if ($members.count -eq 0) {
Write-Host \"Group '$computerName\$localGroupName' is empty.\"
}
else {
Write-Host \"Group '$computerName\$localGroupName' contains these members:\"
$members | Format-Table Name,Domain,Class -autosize
}
else
{
Write-Warning \"Local group '$localGroupName' doesn't exist on computer '$computerName'\"
}
Voici deux scripts qui fonctionnent très bien indépendamment.
Le 1er tout le monde connait donc je passe.
Le second script, extrait à distance,chaque user de l'OU spécifiée (Sauf PDC). Mon problème est que je ne parviens pas à fusionner les deux (Exécuter mon script depuis une liste de serveurs en csv
Info : il faut obligatoirement que WinRm soit installé sur chaque serveur pour que cela fonctionne.
Quelqu'un peut il éclairer ma lanterne car ca urge grave ? Merci d'avance
#############################
#Import-csv
$Computername = get-content c:\Computersupdate.txt
foreach ($line in $data)
{
write-host $line.GrpName $line.Desc $line.GrpType $line.DN
}
$Computername
#Fin d'import
#############################
#Script
$Computername = Read-Host \"Entrer le nom du Serveur\"
$localgroupName = Read-Host \"Entrer le nom du groupe locale\"
if ($computerName -eq \"\") {$computerName = \"$env:computername\"}
If([ADSI]::Exists(\"WinNT://$computerName/$localGroupName,group\"))
{
$group = [ADSI](\"WinNT://$computerName/$localGroupName,group\")
}
$members = @()
$Group.Members() |
% {
$AdsPath = $_.GetType().InvokeMember(\"Adspath\", 'GetProperty', $null, $_, $null)
# Domain members will have an ADSPath like WinNT://DomainName/UserName.
# Local accounts will have a value like WinNT://DomainName/ComputerName/UserName.
$a = $AdsPath.split('/',[StringSplitOptions]::RemoveEmptyEntries)
$name = $a[-1]
$domain = $a[-2]
$class = $_.GetType().InvokeMember(\"Class\", 'GetProperty', $null, $_, $null)
$member = New-Object PSObject
$member | Add-Member -MemberType NoteProperty -Name \"Name\" -Value $name
$member | Add-Member -MemberType NoteProperty -Name \"Domain\" -Value $domain
$member | Add-Member -MemberType NoteProperty -Name \"Class\" -Value $class
$members += $member
}
if ($members.count -eq 0) {
Write-Host \"Group '$computerName\$localGroupName' is empty.\"
}
else {
Write-Host \"Group '$computerName\$localGroupName' contains these members:\"
$members | Format-Table Name,Domain,Class -autosize
}
else
{
Write-Warning \"Local group '$localGroupName' doesn't exist on computer '$computerName'\"
}
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 14 ans 11 mois #8029
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Script de masse
docman95 écrit:
[code:1]
C:\Computersupdate.txt
[/code:1]
Bien que dans ton code on ne sait d'où sort $line et $data...
Utilise import-csv pour construire les 2 paramètres du second script, si toutefois le fichier suivant les contient :Mon problème est que je ne parviens pas à fusionner les deux (Exécuter mon script depuis une liste de serveurs en csv
[code:1]
C:\Computersupdate.txt
[/code:1]
Bien que dans ton code on ne sait d'où sort $line et $data...
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- corny
- Auteur du sujet
- Hors Ligne
- Membre junior
-
Réduire
Plus d'informations
- Messages : 38
- Remerciements reçus 0
il y a 14 ans 11 mois #8035
par corny
Réponse de corny sur le sujet Re:Script de masse
Bonjour,
J'ai effectivement eu cette première idée mais je crois que le second script ne comprends pas qu'il doit s'exécuter sur toute cette liste de serveurs.
Je vais refaire des tests Vendredi et Ferais un retour.
Le bout de code import est faut et déjà corrigé. Il ne faut pas tenir compte de celui ci. Je donnerais le bon code une fois au bureau.
Merci
Message édité par: docman95, à: 11/11/10 22:32<br><br>Message édité par: docman95, à: 11/11/10 22:38
J'ai effectivement eu cette première idée mais je crois que le second script ne comprends pas qu'il doit s'exécuter sur toute cette liste de serveurs.
Je vais refaire des tests Vendredi et Ferais un retour.
Le bout de code import est faut et déjà corrigé. Il ne faut pas tenir compte de celui ci. Je donnerais le bon code une fois au bureau.
Merci
Message édité par: docman95, à: 11/11/10 22:32<br><br>Message édité par: docman95, à: 11/11/10 22:38
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 14 ans 11 mois #8043
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Script de masse
Soit tu utilses une simple boucle Foreach sur le tableau d'objet @{SrvName,GroupName}, soit tu construis ton script en utilisant le pipeline.
La saisie ne devrait pas être dans le script du traitement, mais dans un autre script dédié et celui-ci appellera le premier.
[code:1]
#scriptSingle
$Computername = Read-Host \"Entrer le nom du Serveur\"
$localgroupName = Read-Host \"Entrer le nom du groupe locale\"
if ($computerName -eq \"\"«») {$computerName = \"$env:computername\"}
.\ScriptCollection -Computer $Computername -LocalGroup $localgroupName
#ScriptCollection
param(
[Parameter(Mandatory=$true, ValueFromPipeline=$true)]
[ValidateNotNull()]
$Computer,
[Parameter(Mandatory=$true)]
$LocalGroup,
[/code:1]
Enfin qq chose dans ce genre là, avec un objet issu d'import-csv ce sera plus facile :
[code:1]
#ScriptCollection
param(
[Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)]
[ValidateNotNull()]
$ComputerName,
[Parameter(Mandatory=$true,ValueFromPipelineByPropertyName=$true)]
$LocalGroupName,
[/code:1]
Voir aussi ce tutoriel (PS v2).
La saisie ne devrait pas être dans le script du traitement, mais dans un autre script dédié et celui-ci appellera le premier.
[code:1]
#scriptSingle
$Computername = Read-Host \"Entrer le nom du Serveur\"
$localgroupName = Read-Host \"Entrer le nom du groupe locale\"
if ($computerName -eq \"\"«») {$computerName = \"$env:computername\"}
.\ScriptCollection -Computer $Computername -LocalGroup $localgroupName
#ScriptCollection
param(
[Parameter(Mandatory=$true, ValueFromPipeline=$true)]
[ValidateNotNull()]
$Computer,
[Parameter(Mandatory=$true)]
$LocalGroup,
[/code:1]
Enfin qq chose dans ce genre là, avec un objet issu d'import-csv ce sera plus facile :
[code:1]
#ScriptCollection
param(
[Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)]
[ValidateNotNull()]
$ComputerName,
[Parameter(Mandatory=$true,ValueFromPipelineByPropertyName=$true)]
$LocalGroupName,
[/code:1]
Voir aussi ce tutoriel (PS v2).
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- corny
- Auteur du sujet
- Hors Ligne
- Membre junior
-
Réduire
Plus d'informations
- Messages : 38
- Remerciements reçus 0
il y a 14 ans 11 mois #8047
par corny
Réponse de corny sur le sujet Re:Script de masse
Là, Je n'ai pas tout compris comment utiliser cette méthode. Excuse moi mais il n'y a que 2 mois que je code.
Je vais chercher comment faire.
En tout cas, Merci
Je vais chercher comment faire.
En tout cas, Merci
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 14 ans 11 mois #8049
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Script de masse
docman95 écrit:

docman95 écrit:
Il y a d'autres manières de coder, dés que j'ai le temps je te donne un exemple.
C'est juste le passage de paramètres que tu dois étudier, on peut aussi coder comme ceci:
[code:1]
#ScriptCollection .ps1
param(
$Computer,
$LocalGroup
)
...
[/code:1]
Tu as surtout un pb de paramètrage de tes traitements.
Pas besoinExcuse moi
docman95 écrit:
Ce n'est pas un soucis, c'est vrai que les fonctions/script avancées nécessitent de connaître les mécanismes de base de PS.mais il n'y a que 2 mois que je code.
Il y a d'autres manières de coder, dés que j'ai le temps je te donne un exemple.
C'est juste le passage de paramètres que tu dois étudier, on peut aussi coder comme ceci:
[code:1]
#ScriptCollection .ps1
param(
$Computer,
$LocalGroup
)
...
[/code:1]
Tu as surtout un pb de paramètrage de tes traitements.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.100 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les initiés
- Script de masse