Netzlaufwerke & Netzwerkdrucker anderer User ausfindig machen

  • Tag

    Ich schreib grad für den Kollegen ein Script welcher die Netzlaufwerke und Netzwerkdrucker eines Users in eine Liste schreiben muss (txt). Der Part mit den Netzlaufwerken ist ja an sich nicht so ein Problem. Wie ich die Netzwerkdrucker mit welchen der User verbunden ist rausfinde weiss ich allerdings nicht.
    Das andere Problem ist, wie ich es hinbringe dass er die Verbindungen von einem anderen User besorgen kann da das Script ja für den momentan angemeldeten Benutzer wirkt.
    Hoffe es kann mir wer ein paar Ratschläge geben

    Ahatius

    Edit: Bin in diesem Thema auf das 1. Script im 2. Post gestossen. Das ist an sich ganz gut. Das Problem ist, dass er die Netzwerkdrucker nicht anzeigt von anderen Rechnern, sondern nur lokale Ports. Nur wenn ich die IP von meinem lokalen Rechner, localhost oder den Hostnamen von meinem Rechner eingebe werden mir auch die Netzlaufwerke angezeigt. Ich nehme an, das liegt daran das ich gerade darauf eingeloggt und bin und berechtigt bin das zu sehen oder so in der Art. Gibts da ne Möglichkeit doch an die Netzwerkdrucker ranzukommen?

    Edit2: Was ich auch noch rausgefunden habe ist dass diese ganzen Connections der User unter "HKEY_USERS > S-1-4-21-SID-NUMMER-USER-NUMMER > Printers > Connections" die Drucker im Format von ",,Printserver,Druckername" abgespeichert sind. Das Problem was mich nun daran hindert diese auszulesen ist die Tatsache dass die SID immer anders ist und sich z. B. bereits 10 Leute an diesem Rechner angemeldet haben und somit auch 10 SID Einträge vorhanden wären.

    2 Mal editiert, zuletzt von ahatius (17. Juni 2009 um 11:33)

  • Nun wenn du den angemeldeten Benutzer herausbekommen willst, könnte dieses Skript helfen.
    Allerdings ist das Skript dafür ausgelegt, mit dem "Local System" Account auf dem Rechner zu laufen, musst es also etwas umbauen.
    (Außerdem muss WMI aktiviert/installiert sein, könnte ansonsten bei W2K Probleme geben.)

    Spoiler anzeigen
    [autoit]


    ; check for logged on user
    Global $loggedOnUserValue = RegRead("HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\", "AltDefaultUserName")

    [/autoit] [autoit][/autoit] [autoit]

    ;Msgbox(4096,"Check start","Check if a user is logged on...")
    $loggedOnUserFlag = LoggedOnUser()
    if $loggedOnUserFlag = 0 Then
    Msgbox(4096,"Check","No user is logged on!")
    Else
    Msgbox(4096,"Check","User " & $loggedOnUserValue & " is logged on")
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Func GetLoggedOnUser()
    local $ReturnValue[100][4]
    $user=1

    [/autoit] [autoit][/autoit] [autoit]

    $objWMIService = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\" & @ComputerName & "\root\CIMV2")
    if @error then
    Msgbox(4096,"Error","Error Getting an WMI Object. Error code: " & hex(@error,8))
    SetError(@error)
    Return
    endif

    [/autoit] [autoit][/autoit] [autoit]

    $colItems = $objWMIService.ExecQuery("Select * from Win32_LogonSession Where LogonType = 2 OR LogonType = 10 OR LogonType = 11")
    For $objItem in $colItems
    $colItems2 = $objWMIService.ExecQuery("Associators of {Win32_LogonSession.LogonId=" & $objItem.LogonId & "} Where AssocClass=Win32_LoggedOnUser Role=Dependent")
    For $objItem2 in $colItems2
    $ReturnValue[$user][0]=$objItem2.Name
    $ReturnValue[$user][1]=$objItem2.Domain
    $ReturnValue[$user][2]=$objItem2.FullName
    Switch $objItem.LogonType
    case 2
    $ReturnValue[$user][3]="Console"
    case 10
    $ReturnValue[$user][3]="Remote"
    case 11
    $ReturnValue[$user][3]="Interactive"
    case Else
    $ReturnValue[$user][3]=$objItem.LogonType
    EndSwitch
    $user=$user + 1
    If $user > 100 Then
    Msgbox(4096,"Error","Maximum number of user reached.")
    SetError(100)
    Return
    EndIf
    Next
    Next

    [/autoit] [autoit][/autoit] [autoit]

    If $user > 1 then
    $ReturnValue[0][0]=$user - 1
    Else
    $ReturnValue[0][0]=0
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    return $ReturnValue
    EndFunc

    [/autoit]

    mfg
    Axe

    P.S.: warum geht eigentlich immer die Formatierung den Bach herunter, sobald ich die Vorschau wähle oder abspeichere... :wacko:

    There exist 10 different kind of people on earth.
    Those who understand binary, and those who don't.

  • Hi,

    Zitat

    warum geht eigentlich immer die Formatierung den Bach herunter, sobald ich die Vorschau wähle oder abspeichere...


    versuche mal den Beitrag statt im Editor, im Quellcode zu posten. Bei mir gabs im Editormodus auch diesen seltsamen "Verluste" der Formatierung.

    *Edit
    ich finde meine Netzwerkdrucker u.a. unter HKEY_CURRENT_USER/Printers/DevModesPerUser oder DevModes2 , ausserdem sollten die verschiedenen User nicht das Problem sein, da idr alle auf den Druckerpool zugriff haben.

    ciao
    Andy


    "Schlechtes Benehmen halten die Leute doch nur deswegen für eine Art Vorrecht, weil keiner ihnen aufs Maul haut." Klaus Kinski
    "Hint: Write comments after each line. So you can (better) see what your program does and what it not does. And we can see what you're thinking what your program does and we can point to the missunderstandings." A-Jay

    Wie man Fragen richtig stellt... Tutorial: Wie man Script-Fehler findet und beseitigt...X-Y-Problem

    Einmal editiert, zuletzt von Andy (17. Juni 2009 um 12:20)

  • Danke für den Hinweis, probiere ich beim nächsten Mal.

    Schade eigentlich, dann kann man sich den Editor doch eigentlich sparen...

    mfg
    Axel

    There exist 10 different kind of people on earth.
    Those who understand binary, and those who don't.

  • Danke für das Beispielscript, werd mal schauen ob ich das verwenden kann

    Andy
    Das ist auch richtig so, aber wie der Name des Schlüssel sagt, ist das nur für den momentan angemeldeten Benutzer. Unter HKEY_USERS ist also eigentlich eine Kopie von deinem HKEY_CURRENT_USER.
    Wenn ich also auf die Registry zugreife werde ich entweder kein CURRENT_USER haben (wenn ich über das Netzwerk zugreife) oder aber der CURRENT_USER Schlüssel der angezeigt wird, ist auf mich abgestimmt, also gibt keine Informationen über die anderen User aus. Deshalb muss ich den Namen aus dem HKEY_USER Tree auslesen. Da der Name aber komplett zufällig generiert wird und es eine unbegrenzte Anzahl davon geben kann, ist es nicht so leicht das auszulesen (zumindest wenn man es automatisieren möchte) und daher müsste ich erstmal dieses Problem lösen bis ich überhaupt an die richtige Arbeit kann. Aber trotzdem Danke ;)