Hey,
hat jemand eine idee wie ich auf einer remote maschine festellen kann ob der aktuelle user admin ist?
Danke
SuzbZero
Hey,
hat jemand eine idee wie ich auf einer remote maschine festellen kann ob der aktuelle user admin ist?
Danke
SuzbZero
Hey,
hier der Code wo ich es einbauen wollte:
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_icon=..\..\ico\11.ico
#AutoIt3Wrapper_outfile=AdminOnHost.exe
#AutoIt3Wrapper_UseUpx=n
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
#include <array.au3>
#include <File.au3>
#include <GuiListView.au3>
#include <WindowsConstants.au3>
#include <inet.au3>
#include <adfunctions.au3>
$Form1 = GUICreate("AdminHost", 900, 560, 231, 154)
GUISetFont(8, 400, 0, "@Arial Unicode MS")
GUISetBkColor(0xA6CAF0)
$ListViewhost = GUICtrlCreateListView("Hostname", 32, 32, 170, 430)
$Liste = GUICtrlCreateListView("Host|Group|Typ|Objekt", 224, 32, 670, 430)
$Hostladen = GUICtrlCreateButton("Hostladen", 32, 14, 75, 17, $WS_GROUP)
;$Checkall22 = GUICtrlCreateButton("Last Logged OnUSER", 32, 460, 130, 17, $WS_GROUP)
$Checkall11 = GUICtrlCreateButton("Starten", 220, 480, 130, 17, $WS_GROUP)
$CheckUser = GUICtrlCreateButton("User Info", 350, 480, 70, 17, $WS_GROUP)
$Inputcn = GUICtrlCreateInput("", 32, 480, 170, 23)
$Insert = GUICtrlCreateButton("Hinzufügen", 42, 510, 130, 17, $WS_GROUP)
$del = GUICtrlCreateButton("Löschen", 42, 530, 130, 17, $WS_GROUP)
;$stop = GUICtrlCreateButton("Stop", 32, 513, 75, 17, $WS_GROUP)
$Export = GUICtrlCreateButton("Export", 820, 480, 75, 17, $WS_GROUP)
GUISetState(@SW_SHOW)
Global $FileOpenDialog, $ListViewText, $Text = "", $IP = "", $STATus = "", $result, $hostincsveingetragen
Global $server, $objWMIService
While 1
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]$nMsg = GUIGetMsg()
[/autoit] [autoit][/autoit] [autoit]Switch $nMsg
Case $del
_GUICtrlListView_DeleteAllItems($ListViewhost)
_GUICtrlListView_DeleteAllItems($Liste)
Case $Insert
GUICtrlCreateListViewItem(GUICtrlRead($Inputcn), $ListViewhost)
Case $Export
_export()
Case $GUI_EVENT_CLOSE
Exit
Case $Hostladen
_load()
Case $Checkall11
Local $icount = _GUICtrlListView_GetItemCount($ListViewhost)
For $i = 0 To $icount - 1
$ListViewText = _GUICtrlListView_GetItemText($ListViewhost, $i)
;_befuelle_lv_liste()
Global $server = $ListViewText
If $CmdLine[0] > 0 Then $server = $CmdLine[1]
$objWMIService = ObjGet("winmgmts:{impersonationLevel = impersonate}!\\" & $server & "\root\cimv2")
Ping($server, 100) ; Host anpingen
If not @error = 0 Then MsgBox(0, "", "Host Offline")
ping($server, 100) ; Host anpingen
If @error = 0 Then Membership_Administrators_Local($server)
;EndIf
[/autoit] [autoit][/autoit] [autoit]Next
Case $CheckUser
_userinfo()
EndSwitch
WEnd
Func Membership_Administrators_Local($srv)
If StringUpper($srv) = StringUpper("Localhost") Then $srv = @ComputerName
Local $function_name = "Members"
Local $LM_members, $x, $LM_LocalGroup_Name, $type, $colItems2, $LM_local_user, $y, $line, $TimeStamp
Local $filename_ms = $function_name & "_" & $srv
Local $filename_error_current = $function_name & "_" & $srv & "_error.log"
$LM_LocalGroup_Name = "Administrators"
$colItems = $objWMIService.ExecQuery("Select SID from Win32_Group WHERE Domain='" & $srv & "'", "WQL", 0x30)
If IsObj($colItems) Then
For $objItem In $colItems
If StringUpper($objItem.SID) = StringUpper("S-1-5-32-544") Then $LM_LocalGroup_Name = $objItem.Name
Next
EndIf
$type = ""
$LM_local_user = ""
$colItems = $objWMIService.ExecQuery("Select * from Win32_GroupUser Where GroupComponent=""Win32_Group.Domain='" & $srv & "',Name='" & $LM_LocalGroup_Name & "'""", "WQL", 0x30)
If IsObj($colItems) Then
For $objItem In $colItems
If $objItem.PartComponent <> "" Then
$x = StringSplit($objItem.PartComponent, """")
$type = StringMid($x[1], StringInStr($x[1], ":Win32_") + 7, (StringInStr($x[1], ".") - (StringInStr($x[1], ":Win32_") + 7)))
$LM_members &= $srv & "|" & $LM_LocalGroup_Name & "|" & $type & "|" & $x[2] & "\" & $x[4] & "|" & @CRLF
GUICtrlCreateListViewItem($srv & "|" & $LM_LocalGroup_Name & "|" & $type & "|" & $x[2] & "\" & $x[4] & "|", $Liste)
EndIf
Next
EndIf
ConsoleWrite($LM_members)
EndFunc ;==>Membership_Administrators_Local
[/autoit] [autoit][/autoit] [autoit]Func _userinfo()
[/autoit] [autoit][/autoit] [autoit]$aSel = _GUICtrlListView_GetSelectedIndices($Liste, True)
For $i = 1 To $aSel[0]
$var1 = _GUICtrlListView_GetItemText($Liste, $aSel[$i], 3)
$var2 = _GUICtrlListView_GetItemText($Liste, $aSel[$i], 0)
$var1 = StringReplace($var1, 'Domane\', '')
If $var1 = "" Then
MsgBox(0, "", "User ID nicht bekannt")
Else
$TSDIS = Run(@ComSpec & " /c " & @ScriptDir & '\Modul\lockout.exe ' & $var1, "", @SW_HIDE)
ConsoleWrite(@ScriptDir & '\Modul\lockout.exe ' & $var1)
EndIf
Next
EndFunc ;==>_userinfo
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]Func _export()
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]$hWnd = $Liste
$path = FileSaveDialog('ListView-Export speichern', @ScriptDir, "CSV Datei (*.csv)")
If @error Then Return MsgBox(0, 'Fehler', 'Keine Zieldatei gewählt.')
FileWrite($path & ".csv", _GUICtrlListView_Export($hWnd, 1, ','))
EndFunc ;==>_export
Func _GUICtrlListView_Export($hWnd, $exType = 0, $Delim = Default) ; $exType=0 Array / $exType=1 String
If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
Local $row = _GUICtrlListView_GetItemCount($hWnd)
If $exType Then
If $Delim <> Default Then Local $oldDelim = Opt('GUIDataSeparatorChar', $Delim)
Local $sOut = ''
For $i = 0 To $row - 1
$sOut &= _GUICtrlListView_GetItemTextString($hWnd, $i) & @CRLF
Next
If $Delim <> Default Then Opt('GUIDataSeparatorChar', $oldDelim)
Opt("MustDeclareVars", 1)
Opt("MustDeclareVars", 1)
Opt("MustDeclareVars", 1)
Opt("MustDeclareVars", 1)
Global $countc, $countm, $counts, $Labelhp, $lv3countm
Return $sOut
EndIf
Local $col = _GUICtrlListView_GetColumnCount($hWnd)
Local $aOut[$row][$col]
If $col = 1 Then
ReDim $aOut[$row]
For $i = 0 To UBound($aOut) - 1
$aOut[$i] = _GUICtrlListView_GetItemText($hWnd, $i)
Next
Return $aOut
EndIf
For $i = 0 To UBound($aOut) - 1
For $j = 0 To UBound($aOut, 2) - 1
$aOut[$i][$j] = _GUICtrlListView_GetItemText($hWnd, $i, $j)
Next
Next
Return $aOut
EndFunc ;==>_GUICtrlListView_Export
Func _Load() ; Datenbank-Datei laden
_GUICtrlListView_DeleteAllItems($ListViewhost) ; Das Handle eben noch bestimmen (s. Anfang des Threads)
_GUICtrlListView_DeleteAllItems($Liste) ; Das Handle eben noch bestimmen (s. Anfang des Threads)
Local $sItem
$FileOpenDialog = FileOpenDialog("Pc Liste Wählen", @ScriptDir & "\", "Pc Liste (*.txt;*.csv)", 1 + 4)
Local $hFile = FileOpen($FileOpenDialog, 0) ; Datei zum lesen öffnen
If $hFile <> -1 Then ; wenn das öffnen erfolgreich war, dann...
_GUICtrlListView_BeginUpdate($ListViewhost) ; Listview sperren
While True ; Endlosschleife
$sItem = FileReadLine($hFile) ; Zeile aus der Datei lesen
If @error Then ExitLoop ; wenn das Ende der Datei erreicht ist, dann Endlosschleife verlassen
GUICtrlCreateListViewItem($sItem, $ListViewhost) ; mit den eingelesenen Daten einen neuen Listview-Eintrag erstellen
WEnd
_GUICtrlListView_EndUpdate($ListViewhost) ; Listview wieder freigeben
FileClose($hFile) ; Datei schließen
EndIf
EndFunc ;==>_Load
Ich glaube ich habe mein ziel nicht genau beschrieben ziel ist:
ich will prüfen ob mein user mit dem ich angemeldet bin auf der remote maschine admin ist wenn ja will ich
die funktion Membership_Administrators_Local starten weiss aber nicht wie ich das hinkriegen soll ?
Teste mal das:
#include <Array.au3>
[/autoit] [autoit][/autoit] [autoit]ConsoleWrite(_IsAdmin("Testkonto", @IPAddress1) & @CR)
[/autoit] [autoit][/autoit] [autoit]Func _NetUserGetLocalGroups($sUsername, $sServer = "") ; array[0] contains number of elements
Local Const $LG_INCLUDE_INDIRECT = 0x1
Local $tBufPtr = DllStructCreate("ptr")
Local $ptBufPtr = DllStructGetPtr($tBufPtr)
Local $tEntriesRead = DllStructCreate("dword")
Local $ptEntriesRead = DllStructGetPtr($tEntriesRead)
Local $tTotalEntries = DllStructCreate("dword")
Local $ptTotalEntries = DllStructGetPtr($tTotalEntries)
Local $aRet = DllCall("Netapi32.dll", "int", "NetUserGetLocalGroups", "wstr", $sServer, "wstr", $sUsername, "dword", 0, "dword", $LG_INCLUDE_INDIRECT, "ptr", $ptBufPtr, "dword", -1, "ptr", $ptEntriesRead, "ptr", $ptTotalEntries)
If $aRet[0] Then Return SetError(1, $aRet[0], False)
Local $iEntriesRead = DllStructGetData($tEntriesRead, 1)
Local $pBuf = DllStructGetData($tBufPtr, 1)
Local $sLocalGroupUsersInfo0 = "ptr"
Local $tLocalGroupUsersInfo0 = DllStructCreate($sLocalGroupUsersInfo0)
Local $zLocalGroupUsersInfo0 = DllStructGetSize($tLocalGroupUsersInfo0)
Local $tLocalGroupName
Local $aLocalGroupNames[1] = [0]
For $i = 1 To $iEntriesRead
$tLocalGroupUsersInfo0 = DllStructCreate($sLocalGroupUsersInfo0, $pBuf + ($i - 1) * $zLocalGroupUsersInfo0)
$tLocalGroupName = DllStructCreate("wchar[256]", DllStructGetData($tLocalGroupUsersInfo0, 1))
$aLocalGroupNames[0] += 1
ReDim $aLocalGroupNames[$aLocalGroupNames[0] + 1]
$aLocalGroupNames[$aLocalGroupNames[0]] = DllStructGetData($tLocalGroupName, 1)
Next
DllCall("Netapi32.dll", "int", "NetApiBufferFree", "ptr", $pBuf)
Return $aLocalGroupNames
EndFunc ;==>_NetUserGetLocalGroups
Func _IsAdmin($UserName, $sServer = "")
Local $aLocalGroupNames = _NetUserGetLocalGroups($UserName, $sServer)
Local $ArraySearch = _ArraySearch($aLocalGroupNames, "Administratoren", 1) ;Anmerkung funkey: String nur für deutsche Systeme
If $ArraySearch == -1 Then
Return False
Else
Return True
EndIf
EndFunc ;==>_IsAdmin
klappt irgendwie nicht ???
habe immer ein false??
Ich konnte es nicht testen. Hast du ein deutsches System? Lass dir mal das Array von _NetUserGetLocalGroups anzeigen, was kommt da raus?
_ArrayDisplay($aRet) =
eine idee?
Ich hab XP und es läuft zumindest lokal einwandfrei. Läuft es bei lokal denn auch nicht einmal? Ansonsten hab ich noch keine Idee. ![]()
habe auch XP ???