1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. Micha_he

Beiträge von Micha_he

  • RunAs - Administrator - Netzlaufwerk - Domäne

    • Micha_he
    • 16. Mai 2013 um 21:14

    Wenn Du aber das Programm mit RunAs() starten willst und auf den Ordner/die Freigabe diverse Domänen-User zugreifen dürfen, dann muss Du auch einen Domänen-User bei RunAs() nutzen.

    Zweiter Parameter nicht '@ComputerName' sondern 'Domain.suffix'.

    Dein Beispiel authentifiziert den lokalen 'Administrator' und der hat normalerweise in der Domäne keine besonderen Rechte.

  • RunAs - Administrator - Netzlaufwerk - Domäne

    • Micha_he
    • 14. Mai 2013 um 23:22

    Ganz einfache Geschichte und ein Fehler der immer wieder gemacht wird !

    Das Netzlaufwerk ist 'userbezogen' ! Wenn Du also etwas mit RunAs als jemand anders startest, hat dieser andere User das Netzlaufwerk nicht !

    Eine Lösung wäre: den UNC-Pfad [ggf. vor dem RunAs() mit DriveMapGet() ermitteln] verwenden.

  • Mittels RunAs Registry Sichern/Importieren

    • Micha_he
    • 6. Mai 2013 um 15:49

    Also in unserer Domäne hat jeder User Schreibrechte auf 'seinen' Registryzweig.
    Und ich wüsste auch nicht, das das per Standard nicht so wäre !

  • Ordner umbenennen mit DirMove funktioniert nicht

    • Micha_he
    • 1. Mai 2013 um 13:45

    Vergesst es, mein Beitrag war Müll :thumbdown:

  • Mittels RunAs Registry Sichern/Importieren

    • Micha_he
    • 22. April 2013 um 12:02

    Zum 'Schreiben' in den HKCU-Teil der Registry, sind doch nur User-Rechte erforderlich.
    Ein RunAs ist doch gar nicht notwendig, bzw. an der Stelle komplett unglücklich.

  • Eine EXE aus einem AUTOIT-Script 'als Administrator ausführen'

    • Micha_he
    • 11. April 2013 um 10:26

    Mit Hilfe eines Beitrages von funkey hier im Forum, bin ich gerade auf einen Lösungsansatz für mein Problem gekommen:

    Grundvariante
    [autoit]

    $sExeName = "C:\Windows\System32\RegEdit.exe"
    $sUserName = "DomainAdmin"
    $sUserDomain = "Domain"
    $sUserPass = InputBox("Passwort", "Passwort von '" & $SUserName & "' ?", "", "*")

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

    _ShellExecuteAs($sUserName, $sUserDomain, $sUserPass, 0, $sExeName, "", "", "", @SW_SHOW)

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

    Func _ShellExecuteAs($username, $domain, $password, $logon_flags, $filename, $Param = '', $Workdir = '', $Verb = '', $Showflag = '')
    RunAs($username, $domain, $password, $logon_flags, @AutoItExe & ' /AutoIt3ExecuteLine "ShellExecute(''' & $filename & ''',''' & $Param & ''',''' & $Workdir & ''',''' & $Verb & ''',''' & $Showflag & ''')"')
    EndFunc ;==>_ShellExecuteAs ([email='funkey@autoit.de'][/email])

    [/autoit]

    Da das spätere kompilierte Script leider an einem Ort liegt, wo der RunAs-Benutzer keinen Zugriff hat, musste ich die Grundvariante abändern, damit das File an einem gemeinsamen Ort (in meinem Beispiel %SYSTEMDRIVE%\TEMP) liegt:

    Variante 2
    [autoit]

    $sAName = @AutoItExe
    If @Compiled Then
    FileCopy(@AutoItExe, EnvGet("SystemDrive") & "\TEMP", 1)
    $sAName = EnvGet("SystemDrive") & "\TEMP\" & @ScriptName
    EndIf

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

    $sExeName = "C:\Windows\System32\RegEdit.exe"
    $sUserName = "DomainAdmin"
    $sUserDomain = "Domain"
    $sUserPass = InputBox("Passwort", "Passwort von '" & $sUserName & "' ?", "", "*")

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

    _ShellExecuteAs($sUserName, $sUserDomain, $sUserPass, 0, $sExeName, "", "", "", @SW_SHOW)

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

    Func _ShellExecuteAs($username, $domain, $password, $logon_flags, $filename, $Param = '', $Workdir = '', $Verb = '', $Showflag = '')
    RunAsWait($username, $domain, $password, $logon_flags, $sAName & ' /AutoIt3ExecuteLine "ShellExecute(''' & $filename & ''',''' & $Param & ''',''' & $Workdir & ''',''' & $Verb & ''',''' & $Showflag & ''')"')
    If FileExists($sAName) Then FileDelete($sAName)
    EndFunc ;==>_ShellExecuteAs ([email='funkey@autoit.de'][/email])

    [/autoit]

    Beide Beispiele nutzen hier den RegEdit, welche ja ein identische Verhalten zeigt. Als Test kann auch ein zweiter lokaler User (Domain dann der PCName) dienen, was ich aber nicht getestet habe.

    Vielleicht hilft dies auch mikexmagic.

  • Active Directory - angemeldete Benutzer ermitteln

    • Micha_he
    • 11. April 2013 um 07:54

    Ich nutze folgendes Script, welches die Workstations in der Domäne auflistet und den daran angemeldeten Benutzer anzeigt.
    Ist aber nicht das schnellste ;)

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>

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

    Global Const $SV_TYPE_WORKSTATION = 0x1
    Global Const $SV_TYPE_SERVER = 0x2
    Global Const $SV_TYPE_SQLSERVER = 0x4
    Global Const $SV_TYPE_DOMAIN_CTRL = 0x8
    Global Const $SV_TYPE_DOMAIN_BAKCTRL = 0x10
    Global Const $SV_TYPE_TIME_SOURCE = 0x20
    Global Const $SV_TYPE_AFP = 0x40
    Global Const $SV_TYPE_NOVELL = 0x80
    Global Const $SV_TYPE_DOMAIN_MEMBER = 0x100
    Global Const $SV_TYPE_PRINTQ_SERVER = 0x200
    Global Const $SV_TYPE_DIALIN_SERVER = 0x400
    Global Const $SV_TYPE_XENIX_SERVER = 0x800
    Global Const $SV_TYPE_NT = 0x1000
    Global Const $SV_TYPE_WFW = 0x2000
    Global Const $SV_TYPE_SERVER_MFPN = 0x4000
    Global Const $SV_TYPE_SERVER_NT = 0x8000
    Global Const $SV_TYPE_POTENTIAL_BROWSER = 0x10000
    Global Const $SV_TYPE_BACKUP_BROWSER = 0x20000
    Global Const $SV_TYPE_MASTER_BROWSER = 0x40000
    Global Const $SV_TYPE_DOMAIN_MASTER = 0x80000
    Global Const $SV_TYPE_WINDOWS = 0x400000
    Global Const $SV_TYPE_CLUSTER_NT = 0x1000000
    Global Const $SV_TYPE_TERMINALSERVER = 0x2000000
    Global Const $SV_TYPE_CLUSTER_VS_NT = 0x4000000
    Global Const $SV_TYPE_LOCAL_LIST_ONLY = 0x40000000
    Global Const $SV_TYPE_DOMAIN_ENUM = 0x80000000
    Global Const $SV_TYPE_ALL = 0xFFFFFFFF

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

    $aCompList = _NetServerEnum($SV_TYPE_WORKSTATION)

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

    ;_ArrayDisplay($aCompList)

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

    Dim $aCompListUser [$aCompList[0]+1][2]
    $aCompListUser[0][0] = $aCompList[0]
    $wbemFlagReturnImmediately = 0x10
    $wbemFlagForwardOnly = 0x20
    For $i = 1 To $aCompList[0]
    $aCompListUser[$i][0] = $aCompList[$i]
    $colItems = ""
    $objWMIService = ObjGet("winmgmts:\\" & $aCompList[$i] & "\root\CIMV2")
    If IsObj($objWMIService) Then
    $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_ComputerSystem", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
    If IsObj($colItems) then
    For $objItem in $colItems
    $aCompListUser[$i][1] = $objItem.UserName
    Next
    Endif
    EndIf
    Next
    $aCompList = ""
    _ArrayDisplay($aCompListUser)

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

    Func WMIDateStringToDate($dtmDate)
    Return (StringMid($dtmDate, 5, 2) & "/" & _
    StringMid($dtmDate, 7, 2) & "/" & StringLeft($dtmDate, 4) _
    & " " & StringMid($dtmDate, 9, 2) & ":" & StringMid($dtmDate, 11, 2) & ":" & StringMid($dtmDate,13, 2))
    EndFunc

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

    Func _NetServerEnum ($iSrvType = -1, $sDomain = '')
    Local $uBufPtr = DllStructCreate("ptr;int;int"), $res[1]=[0], $i
    Local $uRecord = DllStructCreate("dword;ptr"), $iRecLen = DllStructGetSize($uRecord)
    Local $uString = DllStructCreate("char[16]")
    Local $uDomain = DllStructCreate("byte[32]"), $pDomain = 0
    If Not ($sDomain='' Or $sDomain='*') Then
    DllStructSetData($uDomain, 1, StringToBinary($sDomain,2))
    $pDomain = DllStructGetPtr($uDomain)
    EndIf
    Local $ret = DllCall ("netapi32.dll", "int", "NetServerEnum", _
    "ptr", 0, "int", 100, _
    "ptr", DllStructGetPtr($uBufPtr,1), "int", -1, _
    "ptr", DllStructGetPtr($uBufPtr,2), _
    "ptr", DllStructGetPtr($uBufPtr,3), _
    "int", $iSrvType, "ptr", $pDomain, "int", 0 )
    If $ret[0] Then Return SetError(1, $ret[0], '')
    Local $res[DllStructGetData($uBufPtr,3)+1]=[DllStructGetData($uBufPtr,3)]
    For $i=1 To DllStructGetData($uBufPtr,3)
    Local $uRecord = DllStructCreate("dword;ptr", DllStructGetData($uBufPtr,1)+($i-1)*$iRecLen)
    Local $sNBName = DllStructCreate("byte[32]", DllStructGetData($uRecord,2))
    DllStructSetData($uString,1,BinaryToString(DllStructGetData($sNBName,1),2))
    $res[$i] = DllStructGetData($uString,1)
    Next
    $ret = DllCall ("netapi32.dll", "int", "NetApiBufferFree", "ptr", DllStructGetData($uBufPtr,1))
    Return $res
    EndFunc

    [/autoit]
  • Eine EXE aus einem AUTOIT-Script 'als Administrator ausführen'

    • Micha_he
    • 10. April 2013 um 17:16

    mikexmagic: Ich weiß glaube ich was Du meinst. Ich hatte heute ein ähnliches, wenn nicht gleiches Problem.

    Ein EXE einer Sicherheitssoftware muss als spezieller User gestartet werden. Unter Windows7 mit "Ausführen als anderer Benutzer" (Shift / Rechstklick), Username und Passwort eingeben, UAC erscheint und die Software startet.

    Das gleiche habe ich mit AutoIt und RunAs() versucht, nichts zu machen. Nach dem Start durch RunAs() mit Username, Domain und Passwort, wird das Programm sofort wieder geschlossen. Eine UAC-Box erscheint nicht. Egal ob mit oder ohne '#RequireAdmin' im Script.

    Eine Lösung habe ich zur Zeit auch nicht....

    Edit: Was wir etwa suche ist eine Kombi aus "Ausführen als Administrator" und "Ausführen als anderer Benutzer". Eben ein 'RunAsOtherAdmin()' ;)

  • Hilfe - Verzweifle mit der Zwischenablage

    • Micha_he
    • 27. März 2013 um 18:01

    Du markierst doch in deinem Script gar nichts, oder ?

    Irgendwie fehlt mir dort ein "^a" oder ein "{SHIFTDOWN}" vor dem "{RIGHT}". Oder ich verstehe deinen Ansatz nicht.

  • Systemordner erstellen funktioniert nicht!

    • Micha_he
    • 26. März 2013 um 10:10

    Oder wenn Du mit einem 32bit-Tool (AutoIt-Script) in den System32-Ordner eines 64bit Windows schreiben willst, folgende Pfade nutzen:

    - "C:\Windows\Sysnative\...."
    - @WindowsDir & "\Sysnative\...."

    Der 'Sysnative'-Pfad ist aber für ein 64bit-Tool (auch nicht für den Windows-Explorer) nicht vorhanden !

  • Script schreibt keine Registry-Einträge

    • Micha_he
    • 13. März 2013 um 15:42

    oder bei 32bit kompiliertem Script unter 64bit Windows zusätzlich zu '#RequireAdmin'
    'HKLM64' statt 'HKLM' in den Reg-Zeilen.

    Gruß
    Micha

  • XML Datei auslesen

    • Micha_he
    • 12. März 2013 um 13:21

    Es gibt in Deiner XML gar kein 'sLType' !

    Edit: Und stell mal ein Testscript mit ein, dann können wir Dir bestimmt helfen.

    Normalerweise müsstest Du es in etwa so schreiben (bezugnehmend es soll dLType heißen):

    _XML......($obj, "/root/deviceList[@dLType='DEVICE']")

  • RegWrite funktioniert nicht

    • Micha_he
    • 8. Februar 2013 um 18:26

    Wobei man, je nach Anwendungsfall, ggf. lieber 'HKEY_CURRENT_USER\Software\Classes' nutzen sollte/kann.

    Für diesen betreffenden User, ist diese Einstellung dann wirksam, für andere User nicht.
    Und das ohne Adminrechte !

  • Dateien in Pfad löschen

    • Micha_he
    • 23. Januar 2013 um 12:13
    Zitat von x0r

    ...blöd fragt

    ?(

  • Dateien in Pfad löschen

    • Micha_he
    • 23. Januar 2013 um 11:39

    und welchen Vorteil soll das gegenüber

    [autoit]

    FileDelete("C:\Temp\*.*")

    [/autoit]


    haben ?

  • Regread Probleme

    • Micha_he
    • 9. Januar 2013 um 16:50

    ggf. vielleicht Windows x64 ?

    Dann musst Du aus einem 32bit AutoIt heraus, mit "HKLM64\..." lesen.

  • WinMove Fehler

    • Micha_he
    • 7. Januar 2013 um 12:56

    Ich hatte in Zeile 59 einen Index beim Array vergessen. Probier nochmal....

    Edit: Bei mir gehts. Nur 1x zu oft auf 'Laden' geklick, kommst Du an 'Editieren' nicht mehr ran. Da must Du im Script Vorsichtsmaßnahmen treffen !

  • WinMove Fehler

    • Micha_he
    • 7. Januar 2013 um 12:27

    Ich würde behaupten, GUICreate() arbeitet mit Außenmaßen (inkl. Rahmen und Titelleiste) und WinMove() mit den Maßen der Arbeitsfläche.

    So klappts vielleicht... (ungetestet):

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    #include <EditConstants.au3>
    #include <File.au3>
    #include <GUIConstantsEx.au3>
    #include <GuiListView.au3>
    #include <GuiButton.au3>
    #include <GuiImageList.au3>
    #include <ListViewConstants.au3>

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

    Opt("GUIResizeMode",$GUI_DOCKALL)
    Opt("GUIDataSeparatorChar", "/")

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

    Local $guiWidth = "825"
    Local $guiHeight = "490"

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

    $hGUI = GUICreate("Bücherliste", $guiWidth, $guiHeight+0, -1, -1)
    $cListView = GUICtrlCreateListView("Autor / Serie / Titel / Genre", 8, 64, $guiWidth-16, 361)
    GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 200)
    GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 1, 200)
    GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 2, 200)
    GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 3, 185)
    $cButton_Load = GUICtrlCreateButton("Liste laden", 8, 16, 105, 33)
    $hImgLoad = _GUIImageList_Create(24, 24, 5, 3)
    _GUIImageList_AddIcon($hImgLoad, "shell32.dll", -235, True)
    _GUICtrlButton_SetImageList($cButton_Load, $hImgLoad, 1)
    $cInput = GUICtrlCreateInput("", 136, 24, 145, 21)
    GUICtrlSendMsg(-1, $EM_SETCUEBANNER, True, "Suchbegriff eingeben...")
    $cButton_Search = GUICtrlCreateButton("Suchen", 304, 16, 105, 33)
    $hImgSearch = _GUIImageList_Create(24, 24, 5, 3)
    _GUIImageList_AddIcon($hImgSearch, "shell32.dll", -23, True)
    _GUICtrlButton_SetImageList($cButton_Search, $hImgSearch, 1)
    $cLabel_hit = GUICtrlCreateLabel("", 420, 25, 250, 25)
    $cButton_exit = GUICtrlCreateButton("Verlassen", $guiWidth-113, 16, 105, 33)
    $hImgExit = _GUIImageList_Create(24, 24, 5, 3)
    _GUIImageList_AddIcon($hImgExit, "shell32.dll", -28, True)
    _GUICtrlButton_SetImageList($cButton_exit, $hImgExit, 1)
    $cButton_edit = GUICtrlCreateButton("Editieren", 8, 440, 105, 33)

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

    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE, $cButton_exit
    Exit
    Case $cButton_Search

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

    Case $cButton_Load
    _GuiResize(-200)
    Case $cButton_edit
    _GuiResize(200)

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

    EndSwitch
    WEnd

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

    ;Change GuiHeight
    Func _GuiResize($newHeight)
    $posEdit = WinGetPos($hGUI)
    WinMove($hGUI, "", $posEdit[0], $posEdit[1], $posEdit[2], $posEdit[3] + $newHeight)
    EndFunc

    [/autoit]
  • txt zusammenfassen

    • Micha_he
    • 2. Januar 2013 um 15:34

    Du greifst mit einem Array-Index auf ein Variable zu, die kein Array ist.

    Mehr kann ich die ohne das Du dein Script bekannt gibst, nicht sagen.
    Die Beispiele aus Beitrag #4 & #6 können in Zeile 3 den Fehler eigentlich nicht erzeugen.

  • Nur ein Registry "valuename" möglich warum? bzw. wie umgehe ich den Fehler?

    • Micha_he
    • 20. Dezember 2012 um 14:06

    Ich glaube ich habe es ! Ändere mal in deinem Original Script 2 die Zeile 24 von:

    Global $hBrush = _GDIPlus_BrushCreateSolid($itxtcolor)

    auf:

    Global $hBrush = _GDIPlus_BrushCreateSolid("0x" & Hex(Int($itxtcolor)))


    Edit: wahrscheinlich muss Du Zeile 21 auch in

    _GDIPlus_GraphicsClear($hGfxBuffer, "0x" & Hex(Int($ibgcolor)))

    ändern. Hier kann ich zur Zeit nicht sagen, warum es dort nicht zum Fehler führt.

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™