Benutzer mit den meisten Antworten
Powershell GUI

Frage
-
Hallo!
Ich bin gerade dabei, ein script zu erstellen, dass mir den Status eines bestimmten Services von mehreren Servern anzeigen soll. Dies soll in einem window ausgegeben werden das sich automatisch refresht. Mein Problem ist, dass die von mir definierte $servers Variable leider nicht funktioniert. Hier der code:
#$servers = @("SERVER01","SERVER02")
#$servicename ="sftlist"
New-ListView -Width 350 -Height 350 -DataBinding @{
ItemsSource = New-Binding -IsAsync -UpdateSourceTrigger PropertyChanged -Path Output
} -View {
New-GridView -AllowsColumnReorder -Columns {
New-GridViewColumn "Name"
New-GridViewColumn "Status"
}
} -DataContext {
Get-PowerShellDataSource -Script {
foreach ($server in $servers)
{
Get-Service -ComputerName $server |where {$_.name -match $servicename}
}
}
} -On_Loaded {
Register-PowerShellCommand -Run -In "0:0:15" -ScriptBlock {
$window.Content.DataContext.Script = $window.Content.DataContext.Script
}
} -asjobWenn ich allerdings die Variablen eine Zeile vor der foreach Schleife einbaue, funktioniert es wie gewünscht.
Hat jemand einen Tipp für mich woran das liegt ?
LG Wolfgang
- Bearbeitet Wolfgang Maier Freitag, 30. September 2011 10:35
Antworten
-
Das Problem ist der -asjob -Parameter. Alles was innerhalb -Script {} steht, findet innerhalb eines anderen Threads statt. Von dort hast du keinen Zugriff auf die Variablen des Ursprungsthreads. Andere CMDLets haben dann normalerweise einen Parameter "-ArgumentList", mit dem man Variablen an den neuen Thread übergeben kann, bei den WPK CMDlets scheint das aber nicht der Fall zu sein.
Grüße, Denniver
Blog: http://bytecookie.wordpress.com
Hilf mit und markiere hilfreiche Beiträge als "Hilfreich" und Beiträge die deine Frage ganz oder teilweise beantwortet haben als "Antwort".- Bearbeitet Denniver ReiningMVP, Moderator Samstag, 1. Oktober 2011 11:06
- Als Antwort markiert Wolfgang Maier Samstag, 1. Oktober 2011 15:57
Alle Antworten
-
Erstmal: deine $servers -Zuweisung am Anfang ist auskommentiert (#), ist das im Orginalskript auch so?
Wenn nicht, poste bitte mal die Variante die funktioniert.
Grüße, Denniver
Blog: http://bytecookie.wordpress.com
Hilf mit und markiere hilfreiche Beiträge als "Hilfreich" und Beiträge die deine Frage ganz oder teilweise beantwortet haben als "Antwort".
- Bearbeitet Denniver ReiningMVP, Moderator Freitag, 30. September 2011 11:07
-
Hallo!
Sorry, vergessen die comments wieder rauszunehmen ;-) Hier die funktionstüchtige Variante:
New-ListView -Width 350 -Height 350 -DataBinding @{
ItemsSource = New-Binding -IsAsync -UpdateSourceTrigger PropertyChanged -Path Output
} -View {
New-GridView -AllowsColumnReorder -Columns {
New-GridViewColumn "Name"
New-GridViewColumn "Status"
}
} -DataContext {
Get-PowerShellDataSource -Script {
$servers = @("SERVER01","SERVER02")
$servicename ="sftlist"
foreach ($server in $servers){
Get-Service -ComputerName $server |where {$_.name -match $servicename}
}
}
} -On_Loaded {
Register-PowerShellCommand -Run -In "0:0:15" -ScriptBlock {
$window.Content.DataContext.Script = $window.Content.DataContext.Script
}
} -asjobLG Wolfgang
-
Das Problem ist der -asjob -Parameter. Alles was innerhalb -Script {} steht, findet innerhalb eines anderen Threads statt. Von dort hast du keinen Zugriff auf die Variablen des Ursprungsthreads. Andere CMDLets haben dann normalerweise einen Parameter "-ArgumentList", mit dem man Variablen an den neuen Thread übergeben kann, bei den WPK CMDlets scheint das aber nicht der Fall zu sein.
Grüße, Denniver
Blog: http://bytecookie.wordpress.com
Hilf mit und markiere hilfreiche Beiträge als "Hilfreich" und Beiträge die deine Frage ganz oder teilweise beantwortet haben als "Antwort".- Bearbeitet Denniver ReiningMVP, Moderator Samstag, 1. Oktober 2011 11:06
- Als Antwort markiert Wolfgang Maier Samstag, 1. Oktober 2011 15:57