Benutzer mit den meisten Antworten
aktive RDP Sitzungen abfragen

Frage
-
Hallo, ich möchte gerne abfragen ob an einem Computer ein Benutzer angemeldet ist. Dazu nutze ich eine WMI Abfrage
$UserNameLogged=(Get-WmiObject Win32_ComputerSystem -ComputerName $computername | select-object username).username
Jetzt habe ich aber festgestellt, dass RDP Verbindungen nicht angezeigt werden. Kennt jemand eine Möglichkeit auch aktive RDP Verbindungen abzufragen?
Vielen Dank
IT Berater
Antworten
-
Hallo NBC2009!
Lies mal diesen Artikel hier inklusive Diskussion (unten).
http://learn-powershell.net/2010/11/01/quick-hit-find-currently-logged-on-users/
Die Auflistung aller explore.exe Prossese und Ihrer Benutzer ist wohl das beste.
PowerShell Artikel, Buchtipps und kostenlose PowerShell Tutorials + E-Books
auf der deutschsprachigen PowerShell Community
Mein 21 Teiliger PowerShell Video Grundlehrgang
Deutsche PowerShell Videos auf Youtube
Folge mir auf:
Twitter | Facebook | Google+- Als Antwort vorgeschlagen Denniver ReiningMVP, Moderator Sonntag, 29. März 2015 20:46
- Als Antwort markiert Denniver ReiningMVP, Moderator Mittwoch, 1. April 2015 11:44
-
Hallo Norbert!
Das verhalten ist ein bekannter Bug in der PowerShell 2.0
Die ForEach Schleife wird leider auch einmal ausgeführt, wenn $Proc Leer ist.
Das dürfte nicht sein.
Teste $Proc mit einem IF($Proc) darauf, ob es ein Objekt enthält.
Wenn es ein Objekt enthält also nicht leer ist wird die ForEach(){} Schleife ausgeführt.#Get explorer.exe processes $Proc = Get-WmiObject win32_process -Filter "Name = 'explorer.exe'" -computer $c If($Proc) { #Go through collection of processes ForEach ($p in $proc) { $temp = '' | Select-Object User $temp.computer = $c $temp.user = ($p.GetOwner()).User $temp $report += $temp } } Else {'Keine Explorer.exe gefunden! Ist Wohl niemand angemeldet' }
PowerShell Artikel, Buchtipps und kostenlose PowerShell Tutorials + E-Books
auf der deutschsprachigen PowerShell Community
Mein 21 Teiliger PowerShell Video Grundlehrgang
Deutsche PowerShell Videos auf Youtube
Folge mir auf:
Twitter | Facebook | Google+- Bearbeitet Peter Kriegel Donnerstag, 30. April 2015 06:01
- Als Antwort markiert NBC2009 Montag, 4. Mai 2015 13:51
Alle Antworten
-
Hallo NBC2009!
Lies mal diesen Artikel hier inklusive Diskussion (unten).
http://learn-powershell.net/2010/11/01/quick-hit-find-currently-logged-on-users/
Die Auflistung aller explore.exe Prossese und Ihrer Benutzer ist wohl das beste.
PowerShell Artikel, Buchtipps und kostenlose PowerShell Tutorials + E-Books
auf der deutschsprachigen PowerShell Community
Mein 21 Teiliger PowerShell Video Grundlehrgang
Deutsche PowerShell Videos auf Youtube
Folge mir auf:
Twitter | Facebook | Google+- Als Antwort vorgeschlagen Denniver ReiningMVP, Moderator Sonntag, 29. März 2015 20:46
- Als Antwort markiert Denniver ReiningMVP, Moderator Mittwoch, 1. April 2015 11:44
-
Hallo Peter,
leider bin ich erst heute dazu gekommen am meinem Thema weiterzuarbeiten.
Vom Grundsatz her funktioniert das Script aus dem angegebenen Link prima. Nur an einer Stelle habe ich ein Problem.Process { #Iterate through collection of computers ForEach ($c in $computer) { #Get explorer.exe processes $proc = gwmi win32_process -computer $c -Filter "Name = 'explorer.exe'" #Go through collection of processes ForEach ($p in $proc) { $temp = "" | Select User $temp.computer = $c $temp.user = ($p.GetOwner()).User $report += $temp } } } }
Wenn an dem Rechner niemand angemeldet ist, dann bekomme ich die Meldung:
Sie können keine Methode für einen Ausdruck mit dem Wert NULL aufrufen.
Jetzt wollte ich besonders schlau sein und habe es mal so probiert:
If (($p.GetOwner()).User -eq $nul) { $global:_tempUser = $nul return }
Aber auch bei dieser Abfrage bekomme ich die Meldung von oben.
Nun habe ich keine Idee mehr. Fehlerunterdrückung wie "$ErrorActionPreference = "silentlycontinue" greifen leider auch nicht.
Kannst du mir helfen?
Liebe Grüße
Norbert
IT Berater
-
Hallo Norbert!
Das verhalten ist ein bekannter Bug in der PowerShell 2.0
Die ForEach Schleife wird leider auch einmal ausgeführt, wenn $Proc Leer ist.
Das dürfte nicht sein.
Teste $Proc mit einem IF($Proc) darauf, ob es ein Objekt enthält.
Wenn es ein Objekt enthält also nicht leer ist wird die ForEach(){} Schleife ausgeführt.#Get explorer.exe processes $Proc = Get-WmiObject win32_process -Filter "Name = 'explorer.exe'" -computer $c If($Proc) { #Go through collection of processes ForEach ($p in $proc) { $temp = '' | Select-Object User $temp.computer = $c $temp.user = ($p.GetOwner()).User $temp $report += $temp } } Else {'Keine Explorer.exe gefunden! Ist Wohl niemand angemeldet' }
PowerShell Artikel, Buchtipps und kostenlose PowerShell Tutorials + E-Books
auf der deutschsprachigen PowerShell Community
Mein 21 Teiliger PowerShell Video Grundlehrgang
Deutsche PowerShell Videos auf Youtube
Folge mir auf:
Twitter | Facebook | Google+- Bearbeitet Peter Kriegel Donnerstag, 30. April 2015 06:01
- Als Antwort markiert NBC2009 Montag, 4. Mai 2015 13:51