emjott
Goto Top

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">
  1. 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: (face-smile [out-lineoutput], InvalidOperationException
+ FullyQualifiedErrorId : ConsoleLineOutputOutOfSequencePacket,Microsoft.PowerShell.Commands.OutLineOutputCommand"

Denke ich hier irgendwie falsch?

Content-ID: 154788

Url: https://administrator.de/contentid/154788

Ausgedruckt am: 22.11.2024 um 01:11 Uhr

H41mSh1C0R
H41mSh1C0R 10.11.2010 um 15:46:00 Uhr
Goto Top
wo kommt das cmdlet Get-TSSession her? Die Powershell hier kennt das nicht.
micneu
micneu 10.11.2010 um 15:55:10 Uhr
Goto Top
ich habe gerade mal auf einem windows 7 ultimate 64bit geschaut und auch nix gefunden.
auf welchem system testets du das script?

gruß michael
micneu
micneu 10.11.2010 um 15:58:49 Uhr
Goto Top
emjott
emjott 10.11.2010 um 16:06:05 Uhr
Goto Top
ich habe mir das Modul "Terminal Services PowerShell Module" von der Seite http://code.msdn.microsoft.com/PSTerminalServices heruntergeladen. Somit brauche ich wenigstens nicht "query user" über PS ausführen.
filippg
filippg 11.11.2010 um 00:09:03 Uhr
Goto Top
Hallo,

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

Gruß

Filipp
emjott
emjott 11.11.2010, aktualisiert am 18.10.2012 um 18:44:03 Uhr
Goto Top
Hallo Flipp,

nur mit \"$status = Get-TSSession -UserName os04 | Select State\" funktioniert es nicht, aber....

$status = Get-TSSession -UserName os04 | Select \"State\"
$status.State

Ausagbe:
Active

Vielen Dank face-smile

@flipp: Gibt es im Netz irgendwo ein Umfassendes Powershell Nachschlagewerk a\'la Selfphp oder selfhtml?

Hier noch ein paar interessante Links zu dem Thema.
- http://blogs.technet.com/b/austria/archive/2007/08/08/howto-script-in-p ...
- http://www.powershellpro.com/
- http://www.johndcook.com/PowerShellCookbook.html#a19
- http://www.techotopia.com/index.php/Working_with_Arrays_in_Windows_Powe ...
- http://www.techotopia.com/index.php/Windows_PowerShell_1.0_Essentials
- powershell string manipulieren