none
Powershell GUI RRS feed

  • 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
        }
    } -asjob

     

    Wenn 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


    Freitag, 30. September 2011 10:34

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".

    Samstag, 1. Oktober 2011 11:06
    Moderator

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".


    Freitag, 30. September 2011 10:52
    Moderator
  • 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
        }
    } -asjob

     

     

    LG Wolfgang

    Freitag, 30. September 2011 11:33
  • 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".

    Samstag, 1. Oktober 2011 11:06
    Moderator
  • Alles klar! Vielen Dank für die Aufklärung! Dann muss ich mir überlegen den -asjob parameter wegzulassen.

    LG Wolfgang

    Samstag, 1. Oktober 2011 15:56