Probleme mit RunAs bzw. RegWrite

  • Hallo ertamal an alle,

    bin neu hier. Habe AutoIt vor einiger Zeit entdeckt und auch von anfang an begeistert.
    Das Einarbeiten fiel auch nicht wirklich schwer, jedoch habe ich jetzt doch bei einem simplen Script Probleme.

    Zum Hintergrund....
    Mein anliegen ist es 3 einfache Reg-Einträe zu setzten, um das PoinAndPrint zu deaktivieren.
    Dies ist erforderlich, da sich die User bei uns keine Drucker mehr verbinden können, seitdem ein neuer PrintServer im Einsatz ist.
    Folgendes Script versuche ich momentan:

    Spoiler anzeigen
    [autoit]


    If Not IsAdmin() Then
    RunAs("admin", "domain", "passwort", @ScriptFullPath, @ScriptDir, @SW_HIDE)
    Exit
    EndIf

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

    If IsAdmin() Then
    MsgBox(0, "", "Admin-Rechte erkannt.")
    EndIf

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

    RegWrite("HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows NT\Printers\PointAndPrint", "Restricted", "REG_DWORD", "00000000") ; "Point-and-Print" deaktivieren
    RegWrite("HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows NT\Printers\PointAndPrint", "InForest", "REG_DWORD", "00000000") ; "Point-and-Print" deaktivieren
    RegWrite("HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows NT\Printers\PointAndPrint", "TrustedServers", "REG_DWORD", "00000000") ; "Point-and-Print" deaktivieren

    [/autoit]

    Ich bekomme auch die Meldung, dass Admin-Rechte erkannt wurden, dennoch wird nix in der Registry verändert.
    Evtl. hilft es...
    Der Pfad wo die Einträge gesetzt werden müssen besteht so auch noch nicht.
    HKEY_CURRENT_USER\Software\Policies\Microsoft <- bis dahin vorhanden.

    Einmal editiert, zuletzt von barTEK (24. April 2009 um 16:23)

  • Moin,

    mit RegWrite("HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows NT\Printers\PointAndPrint", "Restricted", "REG_DWORD", "00000000") schreibst Du den Wert in den Zweig des Users, der das Skript ausführt. In Deinem Fall (s. RunAs) also beim User admin, sofern dessen Profil geladen ist.

    Jeder User darf, sofern keine anderen Restriktionen vorliegen, in den Zweig HKEY_CURRENT_USER schreiben. Adminrechte benötigts Du z.Bsp. für HKEY_LOCAL_MACHINE.

    Starte also Dein Skript als normaler Benutzer und alles sollte wie gewünscht funktionieren.

    Falls Du gffs. Einträge in HKEY_LOCAL_MACHINE ebenfalls ändern musst, ändere HKEY_CURRENT_USER um in HKEY_LOCAL_MACHINE und starte Dein Skript mit Admin Rechten.

    ;-))

    Stefan

  • HI!

    Ich habe deinen Code ausprobiert und er funktioniert einwandfrei.
    Was mir noch eingefallen ist. Ist es eventuell ein 64Bit System!?
    Wenn ja dann beachte diesen Satz aus der Hilfe.
    When running on 64-bit Windows if you want to write a key or value specific to the 64-bit environment you have to suffix the HK... with 64 i.e. HKLM64.

    Ist vielleicht eine dumme Frage aber hast du das Script auch compiliert das es eine EXE ist?


    Lg
    Concara

    If not :?: then ?( else :thumbup:

  • Danke schonmal für die schnelle Hilfe.

    Habe das jetzt nochmals versucht.
    Einmal habe ich nur die Fehlerabfrage mit hinzugefügt.

    Spoiler anzeigen
    [autoit]

    If Not IsAdmin() Then
    RunAs("User", "domain", "passwort", @ScriptFullPath, @ScriptDir, @SW_HIDE)
    Exit
    EndIf

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

    If IsAdmin() Then
    MsgBox(0, "", "Admin-Rechte erkannt.")
    EndIf

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

    RegWrite("HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows NT\Printers\PointAndPrint", "Restricted", "REG_DWORD", "00000000") ; "Point-and-Print" deaktivieren
    If @error Then MsgBox(0, "Fehler", @error)
    RegWrite("HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows NT\Printers\PointAndPrint", "InForest", "REG_DWORD", "00000000") ; "Point-and-Print" deaktivieren
    If @error Then MsgBox(0, "Fehler", @error)
    RegWrite("HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows NT\Printers\PointAndPrint", "TrustedServers", "REG_DWORD", "00000000") ; "Point-and-Print" deaktivieren
    If @error Then MsgBox(0, "Fehler", @error)

    [/autoit]

    Hier bekomme ich immer den Fehler "1" ausgegeben.
    Wobei hier komischerweise nicht die Meldung kommt, dass Admin-Rechte erkannt wurden.

    Zum zweiten habe ich das RunAs einfach weggelassen.

    Spoiler anzeigen
    [autoit]

    RegWrite("HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows NT\Printers\PointAndPrint", "Restricted", "REG_DWORD", "00000000") ; "Point-and-Print" deaktivieren
    If @error Then MsgBox(0, "Fehler", @error)
    RegWrite("HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows NT\Printers\PointAndPrint", "InForest", "REG_DWORD", "00000000") ; "Point-and-Print" deaktivieren
    If @error Then MsgBox(0, "Fehler", @error)
    RegWrite("HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows NT\Printers\PointAndPrint", "TrustedServers", "REG_DWORD", "00000000") ; "Point-and-Print" deaktivieren
    If @error Then MsgBox(0, "Fehler", @error)

    [/autoit]

    Hier passiert nix... Kein Fehler, keine einträge.

    Concara
    Das ist ja merkwürdig.
    zu deinen Fragen. Ja, ich habe es compiliert.
    Und Nein, es ist kein 64Bit System.

    Hmmm, ist schon komisch

    2 Mal editiert, zuletzt von barTEK (22. April 2009 um 14:24)

  • Zitat

    mit RegWrite("HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows NT\Printers\PointAndPrint", "Restricted", "REG_DWORD", "00000000") schreibst Du den Wert in den Zweig des Users, der das Skript ausführt. In Deinem Fall (s. RunAs) also beim User admin, sofern dessen Profil geladen ist.


    Das stimmt... Die Einträge waren unter dem Admin-User

    Zitat

    Jeder User darf, sofern keine anderen Restriktionen vorliegen, in den Zweig HKEY_CURRENT_USER schreiben. Adminrechte benötigts Du z.Bsp. für HKEY_LOCAL_MACHINE.

    Starte also Dein Skript als normaler Benutzer und alles sollte wie gewünscht funktionieren.


    Klappt bei mir leider nicht. Bist du dir da sicher?
    Der User den ich benutze ist ein ganz normaler Domänen-Benutzer und diese sind lokal in der Gruppe Hauptbenutzer.
    Das sollte dann doch gehen.

    Gibt es evtl einen weg das Problem zu umgehen? D.h. das Script als Admin ausführen, aber dass er da in die Reg des Domänen-Benutzers schreibt.

  • Problem ist gelöst...
    Habe das jetzt einfach über die GPO gemacht. Undzwar einfach das Registry.pol File von einem PC genommen auf nem Server hinterlegt.
    Von dort aus kopiere ich es einfach in das Verzeichnis auf dem PC wo die Einstellung benötigt wird.

    Spoiler anzeigen
    [autoit]

    If Not IsAdmin() Then
    RunAs("admin", "domain", "passwort", 0, @ScriptFullPath, @ScriptDir, @SW_HIDE)
    Exit
    EndIf

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

    FileCopy("\\server\ordner\Registry.pol", "C:\Windows\system32\GroupPolicy\User\")

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

    MsgBox(0, "", "Die Einstellungen wurden übernommen. Bitte starten Sie den PC neu.")

    [/autoit]