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

Ausgedruckt am: 28.03.2024 um 22:03 Uhr

Mitglied: 129813
129813 26.07.2016 aktualisiert um 20:58:57 Uhr
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
Mitglied: BirdyB
BirdyB 27.07.2016 um 11:45:54 Uhr
Goto Top
Hi,

thanks for your advice!

Regards
Mitglied: Stefan007
Stefan007 27.07.2016 um 23:12:27 Uhr
Goto Top
Ich hab versucht das Script zu starten und bin selbst dabei schon gescheitert ^^
Mitglied: BirdyB
BirdyB 27.07.2016 um 23:30:11 Uhr
Goto Top
Wo hakt es denn?
Mitglied: Stefan007
Stefan007 28.07.2016 um 08:35:30 Uhr
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 28.07.2016 aktualisiert um 09:05:59 Uhr
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
Mitglied: BirdyB
BirdyB 28.07.2016 um 09:17:06 Uhr
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.
Mitglied: colinardo
colinardo 28.07.2016 aktualisiert um 12:01:48 Uhr
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
Mitglied: Dani
Dani 05.08.2016 um 19:46:31 Uhr
Goto Top
Moin Uwe,
weshalb ist ein PSDrive notwendig? Man kann doch direkt zugreifen:
gci REGISTRY::HKEY_USERS


Gruß,
Dani
Mitglied: colinardo
colinardo 05.08.2016 aktualisiert um 20:56:09 Uhr
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)