Question
[Résolu] Problème variables locales et pssesion
- Cedric
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 7
- Remerciements reçus 0
il y a 14 ans 1 mois #11066
par Cedric
[Résolu] Problème variables locales et pssesion a été créé 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
.
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
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
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.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 14 ans 1 mois #11068
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:problème variables locales et pssesion
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 \"XXX-SEVEN-1\"«»)
{
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
$UpdateResult = 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)
{
#Emet la données dans le pipeline
$update.Title
}
}
Else
{
#Aucune émisson de donnée dans le pipeline, donc $null
Write-Host \"Any updates found on Server\"
}
}
$ofs=','
$ReportTableau.Text=\"$UpdateResult\"
}
[/code:1]
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 \"XXX-SEVEN-1\"«»)
{
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
$UpdateResult = 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)
{
#Emet la données dans le pipeline
$update.Title
}
}
Else
{
#Aucune émisson de donnée dans le pipeline, donc $null
Write-Host \"Any updates found on Server\"
}
}
$ofs=','
$ReportTableau.Text=\"$UpdateResult\"
}
[/code:1]
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Cedric
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 7
- Remerciements reçus 0
il y a 14 ans 1 mois #11070
par Cedric
Réponse de Cedric sur le sujet Re:problème variables locales et pssesion
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
merci beaucoup pour la réponse, ça fonctionne effectivement mieux comme ça
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
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 1 mois #11071
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:problème variables locales et pssesion
Cedric35 écrit:
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:
Essaie d'émettre directement tes variables avec Get-Variable (jamais fait, à tester)...
Séparateur de champs, utilisé lors de la transformation d'un tableau en string.A quoi sert la variable $ofs ?
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:
Il te faut une structure de donnée, une hashtable ou un tableau d'objet ou un objet personnalisé hébergeant d'autres objets.Puis-je récupérer 2 ou plusieurs autres variables contenues dans le ScriptBlock ?
Essaie d'émettre directement tes variables avec Get-Variable (jamais fait, à tester)...
Tutoriels PowerShell
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 1 mois #11072
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:problème variables locales et pssesion
Un essai rapido :
[code:1]
$UpdateResult = Invoke-Command localhost -ScriptBlock {
$updatesession = 10
$updatesearcher = \"CreateUpdateSearcher()\"
$t=@(1,\"deux\"«»)
$v=$null
gv updatesession
gv updatesearcher
gv T
gv V
}
$UpdateResult
$UpdateResult|Foreach { New-Variable -name \"NomDistant_$($_.Name)\" -Value $_.Value -PassThru } #-ErrorAction SilentlyContinue}
[/code:1]
Lit ce post sur le sujet.
[code:1]
$UpdateResult = Invoke-Command localhost -ScriptBlock {
$updatesession = 10
$updatesearcher = \"CreateUpdateSearcher()\"
$t=@(1,\"deux\"«»)
$v=$null
gv updatesession
gv updatesearcher
gv T
gv V
}
$UpdateResult
$UpdateResult|Foreach { New-Variable -name \"NomDistant_$($_.Name)\" -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.
- Cedric
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 7
- Remerciements reçus 0
il y a 14 ans 1 mois #11074
par Cedric
Réponse de Cedric sur le sujet Re:problème variables locales et pssesion
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
)<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.045 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- [Résolu] Problème variables locales et pssesion