Question [Résolu] Problème variables locales et pssesion

Plus d'informations
il y a 14 ans 1 mois #11066 par Cedric
Bonjour à tous !

J'essaye d'intégrer un script dans une interface graphique powershell, seulement (forcement !) ça ne fonctionne pas comme je le voudrais.

Je rencontre un problème avec mon script qui ouvre une PSSession et utilise un ScriptBlock pour vérifier la présence de mise à jour windows à installé sur un serveur.
Je souhaite afficher ces mises à jours dans une \"RichTextBox\" (qui a comme variable $ReportTableau) seulement, je n'arrive pas à récupérer les variables ni leur contenu par la même occasion :blink: .

Je me doute que j'ai raté / oublié quelque chose, malheuresement, je n'arrive pas à savoir quoi. Pourriez-vous m'éclairer svp ?

J'ai comme erreur : \"La propriété \"Text\" est introuvable sur cet objet ; assurez-vous qu'elle existe et qu'elle peut être définie....\"

[code:1]Import-Module ActiveDirectory

#Remove old remote sessions
Remove-PSSession *
#We test in PSRemoting is enable
$WinRM = Test-WSMan -ComputerName \"XXX-SEVEN-1\"

#If enable
If ($? -match \"True\")
{
Write-Host -ForegroundColor Green \"WinRM active on : XXX-SEVEN-1\"
Write-Host \"Opening Session...\"

#Open a session on the remote server
$Session = New-PSSession -ComputerName \"CLA001-SEVEN-1\" -Credential $Cred -Name \"XXX-SEVEN-1\"

#Invoke the command on the remote session
$reboot = Invoke-Command -session $Session -ScriptBlock {
#Create Session COM object
Write-Host = \"Creating COM object for WSUS Session\"
$updatesession = [activator]::CreateInstance([type]::GetTypeFromProgID(\"Microsoft.Update.Session\"))

#Configure Session COM Object
Write-Host = \"Creating COM object for WSUS update Search\"
$updatesearcher = $updatesession.CreateUpdateSearcher()

#Configure Searcher object to look for Updates awaiting installation
Write-Host = \"Searching for WSUS updates on client\"
$searchresult = $updatesearcher.Search(\"IsInstalled=0\")

#Verify if Updates need installed
Write-Host \"Verifing that updates are available to install\"
If ($searchresult.Updates.Count -gt 0)
{
#Updates are waiting to be installed
Write-Host = \"Found $($searchresult.Updates.Count) update(s)!\"
foreach ($update in $searchresult.Updates)
{
$ReportTableau.Text = $update.Title
}
}
Else
{
Write-Host \"Any updates found on Server\"
}
}

}[/code:1]

Merci d'avance de votre aide :) .

Message édité par: Cedric35, à: 7/02/12 17:22<br><br>Message édité par: Cedric35, à: 8/02/12 13:28

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

Plus d'informations
il y a 14 ans 1 mois #11068 par Laurent Dardenne
Salut,
les variables entre une session locale et un remotejob ne sont pas partagées. Ton job doit donc renvoyer le résultat dans le pipeline, en gardant à l'esprit que le objets reçus sont désérialisés(réhydraté) tous comme les exceptions.

Essaie ceci :
[code:1]
Import-Module ActiveDirectory

#Remove old remote sessions
Remove-PSSession *
#We test in PSRemoting is enable

If ( Test-WSMan -ComputerName \&quot;XXX-SEVEN-1\&quot;«»)
{
Write-Host -ForegroundColor Green \&quot;WinRM active on : XXX-SEVEN-1\&quot;
Write-Host \&quot;Opening Session...\&quot;

#Open a session on the remote server
$Session = New-PSSession -ComputerName \&quot;CLA001-SEVEN-1\&quot; -Credential $Cred -Name \&quot;XXX-SEVEN-1\&quot;

#Invoke the command on the remote session
$UpdateResult = Invoke-Command -session $Session -ScriptBlock {
#Create Session COM object
Write-Host = \&quot;Creating COM object for WSUS Session\&quot;
$updatesession = [activator]::CreateInstance([type]::GetTypeFromProgID(\&quot;Microsoft.Update.Session\&quot;«»))

#Configure Session COM Object
Write-Host = \&quot;Creating COM object for WSUS update Search\&quot;
$updatesearcher = $updatesession.CreateUpdateSearcher()

#Configure Searcher object to look for Updates awaiting installation
Write-Host = \&quot;Searching for WSUS updates on client\&quot;
$searchresult = $updatesearcher.Search(\&quot;IsInstalled=0\&quot;«»)

#Verify if Updates need installed
Write-Host \&quot;Verifing that updates are available to install\&quot;
If ($searchresult.Updates.Count -gt 0)
{
#Updates are waiting to be installed
Write-Host = \&quot;Found $($searchresult.Updates.Count) update(s)!\&quot;
foreach ($update in $searchresult.Updates)
{
#Emet la données dans le pipeline
$update.Title
}
}
Else
{
#Aucune émisson de donnée dans le pipeline, donc $null
Write-Host \&quot;Any updates found on Server\&quot;
}
}
$ofs=','
$ReportTableau.Text=\&quot;$UpdateResult\&quot;
}
[/code:1]

Tutoriels PowerShell

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

Plus d'informations
il y a 14 ans 1 mois #11070 par Cedric
Bonjour,

merci beaucoup pour la réponse, ça fonctionne effectivement mieux comme ça :) par contre j'aurais encore 2 question si c'est possible.

A quoi sert la variable $ofs ?

Puis-je récupérer 2 ou plusieurs autres variables contenues dans le ScriptBlock ?

En tout cas, merci pour ta réponse, j'y vois plus clair maintenant :laugh:

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

Plus d'informations
il y a 14 ans 1 mois #11071 par Laurent Dardenne
Cedric35 écrit:

A quoi sert la variable $ofs ?

Séparateur de champs, utilisé lors de la transformation d'un tableau en string.
Ne pas hésiter à chercher sur le forum ou dans l'aide en ligne :
[code:1]
help OFS
Get-Help about_preference_variable[/code:1]
Cedric35 écrit:

Puis-je récupérer 2 ou plusieurs autres variables contenues dans le ScriptBlock ?

Il te faut une structure de donnée, une hashtable ou un tableau d'objet ou un objet personnalisé hébergeant d'autres objets.
Essaie d'émettre directement tes variables avec Get-Variable (jamais fait, à tester)...

Tutoriels PowerShell

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

Plus d'informations
il y a 14 ans 1 mois #11072 par Laurent Dardenne
Un essai rapido :
[code:1]
$UpdateResult = Invoke-Command localhost -ScriptBlock {
$updatesession = 10
$updatesearcher = \&quot;CreateUpdateSearcher()\&quot;
$t=@(1,\&quot;deux\&quot;«»)
$v=$null
gv updatesession
gv updatesearcher
gv T
gv V
}

$UpdateResult
$UpdateResult|Foreach { New-Variable -name \&quot;NomDistant_$($_.Name)\&quot; -Value $_.Value -PassThru } #-ErrorAction SilentlyContinue}
[/code:1]
Lit ce post sur le sujet.

Tutoriels PowerShell

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

Plus d'informations
il y a 14 ans 1 mois #11074 par Cedric
Je vais regarder ça de plus près. Merci en tout cas pour toutes ces réponses ! (je vois un peu mieux la sortie du tunnel maintenant :woohoo:)<br><br>Message édité par: Cedric35, à: 8/02/12 13:29

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

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