Powershell, Probleme mit Array
Hallo allerseits,
weil ich mich selbst in Sachen PHP als Fortgeschrittener einstufe, dachte ich das ich mal fix ein Script in Powershell schreibe.
Doch irgendwie bringt mich das nach mittlerweile 4 Stunden herumgedoktore langsam zur Weißglut.
In dem Script werden die aktuelle Terminalserversitzung ausgelesen und bei einzelnen Sitzung der Status ausgewertet.
Warum auch immer komme ich aber nicht richtig an den Status ran, um ihn dann mit einer if-Bedingung weiterzubearbeiten.
Hier mein Code...
<code ="plain">
#Set-ExecutionPolicy Unrestricted
#Get-Module -Name PSTerminalServices -ListAvailable
#Get-TSSession
#Import-Module PSTerminalServices
$status = Get-TSSession -UserName os04 | ft State
$x = 0
foreach($lo in $status){
$x
$lo
$x++
}
Mit dem Code erhalte ich die folgende Ausgabe:
<code ="plain">
1
State
-----
2
Active
3
4
Mein Problem:
"Get-TSSession | ft " gibt schreibt zwar sauber die Ausgabe der Befehls in die Variable, doch die Variable entpuppt sich dann als Array ($status.gettype()=System.Array), was nicht weiter schlimm ist.
Schlimm ist die Tatsache das ich das Array nicht vernünftig auslesen kann...
Z.B. Wenn ich nun die Zeile mit dem Username os04 auslesen möchte, dann müsste ich das doch mit "$status[2]" machen oder nicht? Wenn ich das so mache kommt die folgende Fehlermeldung
Denke ich hier irgendwie falsch?
weil ich mich selbst in Sachen PHP als Fortgeschrittener einstufe, dachte ich das ich mal fix ein Script in Powershell schreibe.
Doch irgendwie bringt mich das nach mittlerweile 4 Stunden herumgedoktore langsam zur Weißglut.
In dem Script werden die aktuelle Terminalserversitzung ausgelesen und bei einzelnen Sitzung der Status ausgewertet.
Warum auch immer komme ich aber nicht richtig an den Status ran, um ihn dann mit einer if-Bedingung weiterzubearbeiten.
Hier mein Code...
<code ="plain">
- PS-Script welches den Status spezieller TS-Nutzer ausliest
#Set-ExecutionPolicy Unrestricted
#Get-Module -Name PSTerminalServices -ListAvailable
#Get-TSSession
#Import-Module PSTerminalServices
$status = Get-TSSession -UserName os04 | ft State
$x = 0
foreach($lo in $status){
$x
$lo
$x++
}
Mit dem Code erhalte ich die folgende Ausgabe:
<code ="plain">
1
State
-----
2
Active
3
4
Mein Problem:
"Get-TSSession | ft " gibt schreibt zwar sauber die Ausgabe der Befehls in die Variable, doch die Variable entpuppt sich dann als Array ($status.gettype()=System.Array), was nicht weiter schlimm ist.
Schlimm ist die Tatsache das ich das Array nicht vernünftig auslesen kann...
Z.B. Wenn ich nun die Zeile mit dem Username os04 auslesen möchte, dann müsste ich das doch mit "$status[2]" machen oder nicht? Wenn ich das so mache kommt die folgende Fehlermeldung
"Das Objekt vom Typ "Microsoft.PowerShell.Commands.Internal.Format.GroupEndData" ist ungültig oder befindet sich nicht an der richtigen
Position in der Sequenz. Ursache ist wahrscheinlich ein vom Benutzer angegebener Befehl "format-*", der zu Konflikten mit der Standardformatierung führt.
+ CategoryInfo : InvalidData: ( [out-lineoutput], InvalidOperationException
+ FullyQualifiedErrorId : ConsoleLineOutputOutOfSequencePacket,Microsoft.PowerShell.Commands.OutLineOutputCommand"
Position in der Sequenz. Ursache ist wahrscheinlich ein vom Benutzer angegebener Befehl "format-*", der zu Konflikten mit der Standardformatierung führt.
+ CategoryInfo : InvalidData: ( [out-lineoutput], InvalidOperationException
+ FullyQualifiedErrorId : ConsoleLineOutputOutOfSequencePacket,Microsoft.PowerShell.Commands.OutLineOutputCommand"
Denke ich hier irgendwie falsch?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 154788
Url: https://administrator.de/contentid/154788
Ausgedruckt am: 22.11.2024 um 01:11 Uhr
6 Kommentare
Neuester Kommentar
ich habe estwas gefunden, nutzt du das hier?
http://code.msdn.microsoft.com/PSTerminalServices
oder das
http://blogs.microsoft.co.il/blogs/scriptfanatic/archive/2010/02/22/pst ...
gruß michael
http://code.msdn.microsoft.com/PSTerminalServices
oder das
http://blogs.microsoft.co.il/blogs/scriptfanatic/archive/2010/02/22/pst ...
gruß michael
Hallo,
Gruß
Filipp
>Position in der Sequenz. Ursache ist wahrscheinlich ein vom Benutzer angegebener Befehl "format-*", der zu
Konflikten mit der Standardformatierung führt.
die Fehlermeldung lässt ja irgendwie vermuten, dass du das "ft" weglassen bzw. durch ein SELECT ersetzen solltest. Also: "$status = Get-TSSession -UserName os04 | Select State". Daneben ist die Kapselung in Powershell manchmal etwas tricky. Es kann sein, dass du $status[2].State verwenden muss, auch wenn $status eigentlich nur das State-Property enthält.Konflikten mit der Standardformatierung führt.
Gruß
Filipp