Question
Les fonctions et powershell
- DESERT
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 6
- Remerciements reçus 0
il y a 15 ans 6 mois #7827
par DESERT
Les fonctions et powershell a été créé par DESERT
Bonjour,
J'ai un souci avec mon script.
Le probleme vient de mon passage de parametre et du retour de parametre dans une fonction.
Je n'arrive pas avec mon objet credential et m'en servir dans une autre fonction.
Si quelqu'un peut m'aider.
[code:1]#################################################
#Script de redémarrage du service à distance Uranus
$file_machine = \"c:\powershell\\"
$gateway=\"Uranus\"
#Sur chaque machine respective, il faut que le compte \"Uranus\maintenance\" soit créé
$compte=\"maintenance\"
$s_gateway= \"Schedule\"
#Fonction de création d'un passport crédential
#Création d'un passport pour execution du script
#Attention, le compte doit avoir des droit d'administrateur (local ou domaine)
#Demande de login et password et stockage dans un fichier,ici c:\temp\admin.txt
#Le mot de passe est crypté
Function creer_credential([string]$nom_machine, [string]$fic_cred)
{
$fic_cred = $fic_cred + \"admin-\" + $nom_machine+\".txt\"
Write-Host $fic_cred
if((Test-Path $fic_cred) -eq $false)
{
\"CREATION DU COMPTE POUR Uranus\"
$credential = Get-Credential
if ((Test-Path $fic_cred) -eq $false) {New-Item $fic_cred -type \"file\" }
$domaine,$account = $credential.username.split(\"\\\"«»)
$loccred =(select-string \"^$domaine\\$account\" $fic_cred).LineNumber
if ($loccred -eq $null){
$credential.username | Out-File $fic_cred -Encoding oem -Append -Force
convertfrom-securestring $credential.password | Out-File $fic_cred -Encoding oem -Append -Force
\"compte créé\"
}
else
{
$result = get-content $fic_cred
$result[$loccred] = convertfrom-securestring $credential.password
$result | Set-Content $fic_cred
\"mot de passe modifié\"
}
}
}
#Fonction de lecteur du passport crédential
#retourne le compte
Function lecture_credential ([string]$cpt, [string]$nom_machine, [string]$fic_cred)
{
$cred = $nom_machine + \"\\"+\"$cpt\"
$fic_cred = $fic_cred + \"admin-\" + $nom_machine+\".txt\"
$cred = $cred |foreach {$_.Replace(\"\\",\"\\\"«»)}
$loccred =(select-string $cred $fic_cred -list).LineNumber
$account = get-content $fic_cred | where {$_.readcount -gt $loccred-1 -and $_.readcount -lt $loccred+2}
$user_machine = $account[0]
$pass_machine = $account[1]
$secpwd_machine = convertto-securestring $pass_machine
$c_machine = new-object system.management.automation.PSCredential $user_machine,$secpwd_machine
return $c_machine
}
#######################################################################################
#FONCTION D'ARRET D'UN SERVICE
Function arret_service([string]$nom_machine, [string]$nom_service,[object]$cred)
{
\"ARRET DU SERVICE: \"+$nom_service
\"param\"
$nom_machine
$s_gateway
$cpt_machine
$cred
\"FIN\"
(Get-WmiObject -computer $nom_machine Win32_Service -Filter \"Name='$nom_service'\" -credential (get-credential $cred)).InvokeMethod(\"StopService\",$null)
####################################################################################
#ATTEND QUE LE SERVICE SOIT ARRETÉ
$etat=(Get-WmiObject -computer $nom_machine Win32_Service -Filter \"Name='$nom_service'\"«»)
while($etat.State -ne \"Stopped\"«»)
{
$etat=(Get-WmiObject -computer $nom_machine Win32_Service -Filter \"Name='$nom_service'\"«»)
}
\"SERVICE ARRETE: \"+$nom_service
}
#FONCTION DE DEMARRAGE DU SERVICE
Function demarre_service([string]$nom_machine, [string]$nom_service,[object]$cred)
{
\"DEMARRAGE DU SERVICE: \"+$nom_service
(Get-WmiObject -computer $nom_machine Win32_Service -Filter \"Name='$nom_service'\" -credential (get-credential $cred)).InvokeMethod(\"StartService\",$null)
######################################################################################
#ATTEND QUE LE SERVICE SOIT DÉMARRÉ
$etat=(Get-WmiObject -computer $nom_machine Win32_Service -Filter \"Name='$nom_service'\"«»)
while($etat.State -ne \"Running\"«»)
{
$etat=(Get-WmiObject -computer $nom_machine Win32_Service -Filter \"Name='$nom_service'\"«»)
}
\"SERVICE DEMARRE: \"+$nom_service
}
###########################################################################################
######################CORP DU PROGRAMME####################################################
#Creation du passport credential
creer_credential $gateway $file_machine
#Lecture du passport et retourne l'objet credential
$cpt_machine = lecture_credential $compte $gateway $file_machine
#lecture_credential $compte $gateway $file_machine
#Arret du service
arret_service $gateway $s_gateway $cpt_machine
#demarrage du service
demarre_service $gateway $s_gateway $cpt_machine
#Verification que le services est bien lancé
Get-WmiObject -computer $gateway Win32_Service -filter \"Name='$s_gateway'\"
############################################################################################[/code:1]
Merci
Message édité par: Miranthil, à: 20/09/10 15:50
Message édité par: Miranthil, à: 20/09/10 16:27<br><br>Message édité par: Miranthil, à: 20/09/10 16:28
J'ai un souci avec mon script.
Le probleme vient de mon passage de parametre et du retour de parametre dans une fonction.
Je n'arrive pas avec mon objet credential et m'en servir dans une autre fonction.
Si quelqu'un peut m'aider.
[code:1]#################################################
#Script de redémarrage du service à distance Uranus
$file_machine = \"c:\powershell\\"
$gateway=\"Uranus\"
#Sur chaque machine respective, il faut que le compte \"Uranus\maintenance\" soit créé
$compte=\"maintenance\"
$s_gateway= \"Schedule\"
#Fonction de création d'un passport crédential
#Création d'un passport pour execution du script
#Attention, le compte doit avoir des droit d'administrateur (local ou domaine)
#Demande de login et password et stockage dans un fichier,ici c:\temp\admin.txt
#Le mot de passe est crypté
Function creer_credential([string]$nom_machine, [string]$fic_cred)
{
$fic_cred = $fic_cred + \"admin-\" + $nom_machine+\".txt\"
Write-Host $fic_cred
if((Test-Path $fic_cred) -eq $false)
{
\"CREATION DU COMPTE POUR Uranus\"
$credential = Get-Credential
if ((Test-Path $fic_cred) -eq $false) {New-Item $fic_cred -type \"file\" }
$domaine,$account = $credential.username.split(\"\\\"«»)
$loccred =(select-string \"^$domaine\\$account\" $fic_cred).LineNumber
if ($loccred -eq $null){
$credential.username | Out-File $fic_cred -Encoding oem -Append -Force
convertfrom-securestring $credential.password | Out-File $fic_cred -Encoding oem -Append -Force
\"compte créé\"
}
else
{
$result = get-content $fic_cred
$result[$loccred] = convertfrom-securestring $credential.password
$result | Set-Content $fic_cred
\"mot de passe modifié\"
}
}
}
#Fonction de lecteur du passport crédential
#retourne le compte
Function lecture_credential ([string]$cpt, [string]$nom_machine, [string]$fic_cred)
{
$cred = $nom_machine + \"\\"+\"$cpt\"
$fic_cred = $fic_cred + \"admin-\" + $nom_machine+\".txt\"
$cred = $cred |foreach {$_.Replace(\"\\",\"\\\"«»)}
$loccred =(select-string $cred $fic_cred -list).LineNumber
$account = get-content $fic_cred | where {$_.readcount -gt $loccred-1 -and $_.readcount -lt $loccred+2}
$user_machine = $account[0]
$pass_machine = $account[1]
$secpwd_machine = convertto-securestring $pass_machine
$c_machine = new-object system.management.automation.PSCredential $user_machine,$secpwd_machine
return $c_machine
}
#######################################################################################
#FONCTION D'ARRET D'UN SERVICE
Function arret_service([string]$nom_machine, [string]$nom_service,[object]$cred)
{
\"ARRET DU SERVICE: \"+$nom_service
\"param\"
$nom_machine
$s_gateway
$cpt_machine
$cred
\"FIN\"
(Get-WmiObject -computer $nom_machine Win32_Service -Filter \"Name='$nom_service'\" -credential (get-credential $cred)).InvokeMethod(\"StopService\",$null)
####################################################################################
#ATTEND QUE LE SERVICE SOIT ARRETÉ
$etat=(Get-WmiObject -computer $nom_machine Win32_Service -Filter \"Name='$nom_service'\"«»)
while($etat.State -ne \"Stopped\"«»)
{
$etat=(Get-WmiObject -computer $nom_machine Win32_Service -Filter \"Name='$nom_service'\"«»)
}
\"SERVICE ARRETE: \"+$nom_service
}
#FONCTION DE DEMARRAGE DU SERVICE
Function demarre_service([string]$nom_machine, [string]$nom_service,[object]$cred)
{
\"DEMARRAGE DU SERVICE: \"+$nom_service
(Get-WmiObject -computer $nom_machine Win32_Service -Filter \"Name='$nom_service'\" -credential (get-credential $cred)).InvokeMethod(\"StartService\",$null)
######################################################################################
#ATTEND QUE LE SERVICE SOIT DÉMARRÉ
$etat=(Get-WmiObject -computer $nom_machine Win32_Service -Filter \"Name='$nom_service'\"«»)
while($etat.State -ne \"Running\"«»)
{
$etat=(Get-WmiObject -computer $nom_machine Win32_Service -Filter \"Name='$nom_service'\"«»)
}
\"SERVICE DEMARRE: \"+$nom_service
}
###########################################################################################
######################CORP DU PROGRAMME####################################################
#Creation du passport credential
creer_credential $gateway $file_machine
#Lecture du passport et retourne l'objet credential
$cpt_machine = lecture_credential $compte $gateway $file_machine
#lecture_credential $compte $gateway $file_machine
#Arret du service
arret_service $gateway $s_gateway $cpt_machine
#demarrage du service
demarre_service $gateway $s_gateway $cpt_machine
#Verification que le services est bien lancé
Get-WmiObject -computer $gateway Win32_Service -filter \"Name='$s_gateway'\"
############################################################################################[/code:1]
Merci
Message édité par: Miranthil, à: 20/09/10 15:50
Message édité par: Miranthil, à: 20/09/10 16:27<br><br>Message édité par: Miranthil, à: 20/09/10 16:28
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 6 mois #7829
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Les fonctions et powershell
Salut,
Miranthil écrit:
Miranthil écrit:
Peux-tu préciser le pb rencontré ? comportement, msg erreur, etc.Bonjour,
Je n'arrive pas avec mon objet credential et m'en servir dans une autre fonction.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- DESERT
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 6
- Remerciements reçus 0
il y a 15 ans 5 mois #7841
par DESERT
Réponse de DESERT sur le sujet Re:Les fonctions et powershell
Merci tout d'abord de t'interesser à mon probleme,
Au debut j'avais fait le script en sequentiel.
Apres, je me suis dit que de ré-écrire à chaque fois les memes chose pour arreter ou démarrer un service est un peu lours.
Donc, j'ai fait des fonctions que j'appelle a chaque fois que j'en ai besoin.
Bref,
mon souci, vient de cette ligne la:
[code:1]$cpt_machine = lecture_credential $compte $gateway $file_machine[/code:1]
et ce que je vient de voir c'est qu'elle ne s'éxecute pas.
Si j'enleve [code:1]$cpt_machine =[/code:1] elle s'execute, mais j'ai besoin de se parametre pour le passer dans une autres fonctions.
J'ai essayé ca mais ca fonctionne pas:
[code:1]$cpt_machine|lecture_credential $compte $gateway $file_machine[/code:1]
Alors, voila la question: Comment recupere ton un objet retourné par une fonction?
Merci
Au debut j'avais fait le script en sequentiel.
Apres, je me suis dit que de ré-écrire à chaque fois les memes chose pour arreter ou démarrer un service est un peu lours.
Donc, j'ai fait des fonctions que j'appelle a chaque fois que j'en ai besoin.
Bref,
mon souci, vient de cette ligne la:
[code:1]$cpt_machine = lecture_credential $compte $gateway $file_machine[/code:1]
et ce que je vient de voir c'est qu'elle ne s'éxecute pas.
Si j'enleve [code:1]$cpt_machine =[/code:1] elle s'execute, mais j'ai besoin de se parametre pour le passer dans une autres fonctions.
J'ai essayé ca mais ca fonctionne pas:
[code:1]$cpt_machine|lecture_credential $compte $gateway $file_machine[/code:1]
Alors, voila la question: Comment recupere ton un objet retourné par une fonction?
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 15 ans 5 mois #7842
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Les fonctions et powershell
Miranthil écrit:

Je n'ai pas le temps d'aller plus loin.
Miranthil écrit:
[code:1]
function Get-dix { return 10}
$I= Get-dix
$I
[/code:1]
Ensuite ta fonction ne doit émettre que le résultat( 1 objet ou une collection d'objets), ni plus ni moins.
Ceci posera pb :
[code:1]
convertfrom-securestring $credential.password | Out-File $fic_cred -Encoding oem -Append -Force
\"compte créé\"
}
[/code:1]
car la chaîne \"compte créé\" est émise dans le pipe, le mieux est de préciser l'intention avec Write-Host ou return selon le cas.
La construction suivante restant valide :
[code:1]
function Get-Numbers {
#émet la donné dans le pipeline
10
#émet la donné dans le pipeline
11
#émet la donné dans le pipeline
12
}
>>
$i=Get-Numbers
$i
#10
#11
#12
[/code:1]
Je ne comprend pas trop où est le pb, j'ai testé la création de credential, mais ta fonction émet des données d'affichage (a priori) dans le pipe. Ensuite l'usage de lecture-Credential plantemon souci, vient de cette ligne la:
[code:1]$cpt_machine = lecture_credential $compte $gateway $file_machine[/code:1]
et ce que je vient de voir c'est qu'elle ne s'éxecute pas.
Si j'enleve [code:1]$cpt_machine =[/code:1] elle s'execute,
Je n'ai pas le temps d'aller plus loin.
Miranthil écrit:
Comme tu le fais :Alors, voila la question: Comment recupere ton un objet retourné par une fonction?
[code:1]
function Get-dix { return 10}
$I= Get-dix
$I
[/code:1]
Ensuite ta fonction ne doit émettre que le résultat( 1 objet ou une collection d'objets), ni plus ni moins.
Ceci posera pb :
[code:1]
convertfrom-securestring $credential.password | Out-File $fic_cred -Encoding oem -Append -Force
\"compte créé\"
}
[/code:1]
car la chaîne \"compte créé\" est émise dans le pipe, le mieux est de préciser l'intention avec Write-Host ou return selon le cas.
La construction suivante restant valide :
[code:1]
function Get-Numbers {
#émet la donné dans le pipeline
10
#émet la donné dans le pipeline
11
#émet la donné dans le pipeline
12
}
>>
$i=Get-Numbers
$i
#10
#11
#12
[/code:1]
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.064 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Les fonctions et powershell