birdyb
Goto Top

Teamviewer-IDs von angemeldeten Benutzern auslesen

Auch wenn es im Allgemeinen verpönt ist, nutzen wir derzeit noch den Teamviewer für den Remotesupport.
Unter Anderem läuft der Teamviewer auch auf einem Remotedesktop-Session-Host. Um mir die IDs der angemeldeten Benutzer einfacher zu holen, habe ich ein kleines Skript in Powershell gebastelt, vielleicht hilft es ja dem Einen oder Anderen.

Beste Grüße!

Berthold


# Liest die Teamviewer-IDs von den angemeldeten Benutzern

$hkeyUsers = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('USERS', $env:COMPUTERNAME)  
$hkeyUsersSubkeys = $hkeyUsers.GetSubKeyNames()

$hkeyUsersSubkeys | % {
    $tvKey = "$_\software\Teamviewer"         
    $tvKeySubKey = $hkeyUsers.OpenSubKey($tvKey)
    if ($tvKeySubKey) {
        $tvKeyNames = $tvKeySubKey.GetValue('ClientIDOfTSUser')       
        if ($tvKeyNames) {
            $objSID = New-Object System.Security.Principal.SecurityIdentifier ($_)
            $objUser = $objSID.Translate( [System.Security.Principal.NTAccount])
            "$objUser -- $($tvKeyNames)"   
        }
        else { 
        #ClientIDOfTSUser existiert nicht   
        }
$tvKeySubKey.Close()
    }
    else {
    #Schlüssel Teamviewer existiert nicht
    }
}
$hkeyUsers.Close()

Content-Key: 310907

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

Printed on: April 16, 2024 at 06:04 o'clock

Mitglied: 129813
129813 Jul 26, 2016 updated at 18:58:57 (UTC)
Goto Top
Hi,
OpenRemoteBaseKey
for your information, if you use OpenRemoteBaseKey you should always close the registry resource afterwards
$hkeyUsers.Close()
also for each subsequent calls which open keys .
$tvKeySubKey.Close()

Regards
Member: BirdyB
BirdyB Jul 27, 2016 at 09:45:54 (UTC)
Goto Top
Hi,

thanks for your advice!

Regards
Member: Stefan007
Stefan007 Jul 27, 2016 at 21:12:27 (UTC)
Goto Top
Ich hab versucht das Script zu starten und bin selbst dabei schon gescheitert ^^
Member: BirdyB
BirdyB Jul 27, 2016 at 21:30:11 (UTC)
Goto Top
Wo hakt es denn?
Member: Stefan007
Stefan007 Jul 28, 2016 at 06:35:30 (UTC)
Goto Top
Zitat von @BirdyB:

Wo hakt es denn?


Bei mir über all was PS angeht. Ich frage mich die ganze Zeit woher du die Befehle überhaupt bekommst?

Also klar du deklarierst deine Variablen, das leuchtet mir vom PHP her noch ein. Aber so insgesamt, wie kommt man an das ganze Fachwissen für die PowerShell?
Mitglied: 129813
129813 Jul 28, 2016 updated at 07:05:59 (UTC)
Goto Top
Aber so insgesamt, wie kommt man an das ganze Fachwissen für die PowerShell?
Reading the doc's from Microsoft, and studying the .NET Framework face-smile
Powershell is based on NET so every object from it can also be used in PS.

Learn c# and you will have 60% of PS knowledge, besides the specific cmdlets face-wink

Regards
Member: BirdyB
BirdyB Jul 28, 2016 at 07:17:06 (UTC)
Goto Top
Naja, ich bin da auch kein Held...
Ich brauchte nur dringend etwas, was diese Aufgabe erledigt... Und mit google und etwas technischem Sachverstand habe ich dann dieses Skript zusammengeklöppelt...
Vermutlich schreibt @colinardo dir das in 30 Sekunden runter...

Ich dachte mir halt, dass ich mein Erstlingswerk mal mit euch teile, denn ich bin bestimmt nicht der Einzige mit einer solchen Fragestellung.
Member: colinardo
colinardo Jul 28, 2016 updated at 10:01:48 (UTC)
Goto Top
Hallo Berthold,
schön das du dich mit der PS auseinandersetzt face-smile

Nur als Ergänzung, falls du den Key HKEY_USERS nicht über die Default PS-Drives gefunden haben solltest und deswegen den direkten Weg über die .NET Klasse gegangen bist. Das ganze lässt sich alternativ auch so mit den Standard CMDLets machen:
# PS-Drive für HKEY_USERS erstellen
New-PSDrive -Name HKU -PSProvider Registry -Root "HKEY_USERS" -EA Ignore  
# Subkeys von HKU durchlaufen
gci HKU: -Force -EA Ignore | %{
    $value = Get-ItemProperty -Name 'ClientIDOfTSUser' -Path "$($_.PSPath)\Software\TeamViewer" -EA Ignore | select -Expand ClientIDOfTSUser  
    if($value){
        $user = (New-Object System.Security.Principal.SecurityIdentifier($_.PSChildName)).Translate([System.Security.Principal.NTAccount]).Value
        "$user -- $value"  
    }
}
Vermutlich schreibt @colinardo dir das in 30 Sekunden runter...
Auf die Zeit kommt es nicht so sehr an, auf ein richtiges Ergebnis schon eher face-smile

Allzeit gutes Gelingen.
Grüße Uwe
Member: Dani
Dani Aug 05, 2016 at 17:46:31 (UTC)
Goto Top
Moin Uwe,
weshalb ist ein PSDrive notwendig? Man kann doch direkt zugreifen:
gci REGISTRY::HKEY_USERS


Gruß,
Dani
Member: colinardo
colinardo Aug 05, 2016 updated at 18:56:09 (UTC)
Goto Top
Hallo Dani,
Zitat von @Dani:
weshalb ist ein PSDrive notwendig? > Man kann doch direkt zugreifen:
Jepp, aber das es notwendig ist hab ich nicht gesagt face-wink, viele Wege führen nach Rom. Hier hatte ich es halt mal zur Abwechslung damit gemacht, falls man es öfter brauchen sollte ... stand noch so in meinem Template ...

Grüße und schönes Wochenende
Uwe (der das dringend nötig hat nach 50 Stunden nonstop)