Question Les fonctions et powershell

Plus d'informations
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

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

Plus d'informations
il y a 15 ans 6 mois #7829 par Laurent Dardenne
Salut,
Miranthil écrit:

Bonjour,
Je n'arrive pas avec mon objet credential et m'en servir dans une autre fonction.

Peux-tu préciser le pb rencontré ? comportement, msg erreur, etc.

Tutoriels PowerShell

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

Plus d'informations
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

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

Plus d'informations
il y a 15 ans 5 mois #7842 par Laurent Dardenne
Miranthil écrit:

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,

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 plante :S
Je n'ai pas le temps d'aller plus loin.
Miranthil écrit:

Alors, voila la question: Comment recupere ton un objet retourné par une fonction?

Comme tu le fais :
[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
\&quot;compte créé\&quot;
}
[/code:1]
car la chaîne \&quot;compte créé\&quot; 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
}
&gt;&gt;
$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
Propulsé par Kunena