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. littleman

Beiträge von littleman

  • Benutzerrechte setzen mit Powershell und Autoit - evtl alternativ Ideen

    • littleman
    • 16. August 2017 um 11:20

    Hallo liebe Gemeinde,

    ich versuche ein Tool zu erstellen, welches diese Dinge tut:

    GUI mit Eingabe von Ordnername, Username.
    Dieser erstellt ein Ordner, der Besitzer ist der angemeldete User und hat auch Vollzugriff.
    Das funktioniert auch.
    Nun möchte ich mit Eingabe des Usernames einen Benutzer hinzufügen, der auch lesen kann. Quasi ein temporärer Austauschordner.

    Mit dem Powershell Script, funktioniert das auch ohne Probleme. Nun weiß ich nicht wie ich das in Verbindung mit Autoit bringen soll.

    Jemand vielleicht eine Idee?

    Bash
    New-Item -Path "H:\Share_Test\Testordner" -ItemType "directory"
    
    
    $Right="ReadAndExecute"
    $path="H:\Share_Test\Testordner"
    $Principal="DOMAIN\testuserinderdomain"
    $rule=New-Object System.Security.AccessControl.FileSystemAccessRule($Principal,$Right,3, 0,"Allow")
    $acl = get-acl $path
    $acl.SetAccessRule($rule)
    set-acl $path $acl
    AutoIt
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 434, 209, 197, 178)
    $Input1 = GUICtrlCreateInput("Input1", 168, 40, 185, 21)
    $Checkbox1 = GUICtrlCreateCheckbox("lesen", 168, 80, 65, 17)
    $Button1 = GUICtrlCreateButton("Erstellen", 168, 176, 75, 25)
    $Checkbox2 = GUICtrlCreateCheckbox("lesen und schreiben", 168, 96, 129, 17)
    $Label1 = GUICtrlCreateLabel("Rechte", 24, 80, 62, 24)
    GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif")
    $Label2 = GUICtrlCreateLabel("Zugriff für", 21, 127, 84, 24)
    GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif")
    $Label3 = GUICtrlCreateLabel("Ordnernamen", 24, 44, 113, 24)
    GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif")
    $Input2 = GUICtrlCreateInput("Input2", 168, 128, 185, 21)
    $Button2 = GUICtrlCreateButton("Abbrechen", 280, 176, 75, 25)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###
    
    
    ;~ Powershell Comman
    
    
    Func _PowerShell_Command($sCommand)
    	Local $iPID = Run(StringFormat('"%s" "%s"', 'C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe', $sCommand), @ScriptDir, @SW_HIDE, 0x2)
    	Local $sOut
    	Do
    		$sOut &= StdoutRead($iPID)
    	Until @error
    	StdioClose($iPID)
    	Return $sOut
    EndFunc   ;==>_PowerShell_Command
    
    
    
    
    While 1
    	$nMsg = GUIGetMsg()
    	Switch $nMsg
    		Case $GUI_EVENT_CLOSE
    			Exit
    		Case $Button1
    			$ordnername=GUICtrlRead($Input1)
    			$username=GUICtrlRead($Input2)
    			DirCreate("H:\Share_Test\"& $ordnername)
    
    
    			$Right="ReadAndExecute"
    
    
    			$path="H:\Share_Test\"& $ordnername
    			$Principal="DOMAIN\"&$username
    
    
    			$rule="New-Object System.Security.AccessControl.FileSystemAccessRule("&$Principal&","&$Right&",3, 0,""Allow"")"
    
    
    			$acl = "get-acl "& $path
    
    
    			$acl=_PowerShell_Command($acl)
    
    
    			_PowerShell_Command($acl&'RemoveAccessRule('&$rule&')')
    			_PowerShell_Command('set-acl '&$path &$acl)
    
    
    
    
    	EndSwitch
    WEnd
    Alles anzeigen
  • 1D Array Splitten mit Regex

    • littleman
    • 1. März 2017 um 12:24
    Zitat von BugFix

    Mal nebenbei: Warum das mühsame Auseinanderfriemeln, statt ausschliesslich CN abzufragen?

    wie meinst du das?

  • _FileListToArray in Combo einbinden, vorher Splitten nach Datei und Endungen

    • littleman
    • 28. Februar 2017 um 15:47
    Zitat von BugFix

    EDIT: wozu schreib ich überhaupt, alpines ist sowas von heiß aufs Posten

    haha.
    Danke nochmal an alle.

  • _FileListToArray in Combo einbinden, vorher Splitten nach Datei und Endungen

    • littleman
    • 28. Februar 2017 um 14:53

    Sehr gut:

    For $i=1 To Ubound($sFileOpenDialog1)-1
    $sFileOpenDialog1[$i]=StringTrimLeft($sFileOpenDialog1[$i],StringInStr($sFileOpenDialog1[$i],"\",0,-1))
    GUICtrlSetData($Combo2,$sFileOpenDialog1[$i])
    Next
    GUISetState(@SW_SHOW

    funktioniert.

    Kannst du mit die 0,-1 am Ende nochmal erklären?

  • _FileListToArray in Combo einbinden, vorher Splitten nach Datei und Endungen

    • littleman
    • 28. Februar 2017 um 14:28

    Hallo zusammen,

    ich habe ein kleines Problem:
    Ich habe ein Ordner nach Dateien ausgelesen mit _FileListToArray.
    Diese auch in das Auswahlfeld eingebunden.
    Doch ich bekomme nur den kompletten Pfad angezeigt.

    C:\TEST\Ordner\Datei1.exe
    C:\TEST\Ordner\Datei2.exe
    C:\TEST\Ordner\Datei3.exe


    Ich würde gerne die Ausgabe so haben:


    Datei1.exe
    Datei2.exe
    Datei3.exe


    In einem Auswahlfeld, weiter oben im Script(nicht gepostet) habe ich das so gelöst:

    Local $sDrive = "", $sDir = "", $sFileName = "", $sExtension = ""
    Local $aPathSplit = _PathSplit($sFileOpenDialog, $sDrive, $sDir, $sFileName, $sExtension)
    $test1=$aPathSplit[3]
    $test2=$aPathSplit[4]
    $test3=$test1&$test2

    Aber das ist nur, weil ich ein Zeile habe und beim auslesen der Ordner mehr Felder habe.

    Code
    Case $hSearch
    				Local $sFileOpenDialog = "C:\TEST\Ordner"
    				local $sFileOpenDialog1= _FileListToArray($sFileOpenDialog, Default, Default, True)
    			; Create GUI
    				$testgui=GUICreate("ListView Add Array", 400, 100)
    				$Combo2 = GUICtrlCreateCombo("Video", 40, 16, 350, 25, BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL, $CBS_DROPDOWNLIST))
    
    
    				For $i=1 To Ubound($sFileOpenDialog1)-1
    					GUICtrlSetData($Combo2,$sFileOpenDialog1[$i])
    				Next
    				GUISetState(@SW_SHOW)
    
    
    			; Loop until the user exits.
    			Do
    			Until GUIGetMsg() = $GUI_EVENT_CLOSE
    			GUIDelete($testgui)
    Alles anzeigen
  • 1D Array Splitten mit Regex

    • littleman
    • 24. Februar 2017 um 09:14

    MAche ich das am besten mit einer IF-Abfrage?

  • 1D Array Splitten mit Regex

    • littleman
    • 23. Februar 2017 um 16:28

    Alpines, du bist mein Helf heute.

    Hier mein code nochmal abgeändert und sortiert:

    Code
    _ADGetUserGroups($irgendeineVariable,$testinout)
    		_ArrayDisplay($irgendeineVariable)
    		$count = UBound($irgendeineVariable)
    		For $i = 0 TO $count -1
    		$irgendeineVariable[$i] = StringTrimLeft(StringSplit($irgendeineVariable[$i], ",", 2)[0], 3)
    		Next
    		_ArraySort($irgendeineVariable)
    		_ArrayDisplay($irgendeineVariable)
    		$ergebniss=_ArrayToString($irgendeineVariable)
    		$ergebniss=StringReplace($ergebniss,"|",@CRLF)
    		_GUICtrlEdit_SetText($Edit1,$ergebniss)
    Alles anzeigen
  • 1D Array Splitten mit Regex

    • littleman
    • 23. Februar 2017 um 16:00

    So ähnlich habe ich das auch ausprobiert gehabt.
    Mein Array sieht so aus:

    $irgendeineVariable
    Werte:

    CN=GruppeBackup_R,OU=test,DC=com,DC=int
    CN=GruppeBackup_C,OU=test,DC=com,DC=int
    CN=Gruppehouskeeping_R,OU=test,DC=com,DC=int
    CN=Gruppehouskeeping_R,OU=test,DC=com,DC=int


    Fehlermeldung:

    Ad_Abfrage_v1.4.au3" (435) : ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.:
    $irgendeineVariable[$i] = StringTrimLeft(StringSplit($irgendeineVariable[$i], ",", 3)[0], 3)
    ^ ERROR

    435: _ArrayDisplay($irgendeineVariable)

    Wenn ich
    $test= StringSplit($irgendeineVariable[2], ",")
    Habe ich den zweiten Wert in der $irgendeineVariable gesplittet nach ,.
    Und ich wollte dann den ersten Wert von $test, aber bekomme die gleiche Meldung wie oben :(

    Code
    _ADGetUserGroups($irgendeineVariable,$testinout)
    		_ArrayDisplay($irgendeineVariable)
    		$count = UBound($irgendeineVariable)
    		For $i = 1 TO $count
    		$irgendeineVariable[$i] = StringTrimLeft(StringSplit($irgendeineVariable[$i], ",", 3)[0], 3)
    		Next
    		_ArrayDisplay($irgendeineVariable)
    		$ergebniss=_ArrayToString($irgendeineVariable)
    		_GUICtrlEdit_SetText($Edit1,$ergebniss)
  • 1D Array Splitten mit Regex

    • littleman
    • 23. Februar 2017 um 15:00

    ich habe ein schon ein array, wieso muss ich ein multiline bauen?

  • 1D Array Splitten mit Regex

    • littleman
    • 23. Februar 2017 um 14:48

    HAllo zusammen,

    habe ein Array was ich gerne splitten möchte und nur einen Wert mitnehmen möchte.
    Die Zeichen können sich je nach länge ändern.

    Bsp.:
    cn=DASISTMEIN TEXT,ou=dsgfdsg,fdgdfsg
    cn=DASISTMEIN LEBLINGS TEXT,ou=dsgfdsg,fdgdfsg

    Ergebnis im neuen Array:
    1. DASISTMEIN TEXT
    2. DASISTMEIN LEBLINGS TEXT

    und wenn ich das _arraytostring mache, soll jedes Zeile einen Newline erhalten.

  • Funktion richtig einsetzen

    • littleman
    • 23. Februar 2017 um 10:21

    Würde das so aussehen?


    Global $irgendeineVariable
    $groupe="GruppeinAD"
    _ADGetGroupMemberOf($irgendeineVariable,$groupe)
    _ArrayDisplay($irgendeineVariable)

  • Funktion richtig einsetzen

    • littleman
    • 23. Februar 2017 um 09:54

    Wie deklariere ich $memberof ist ja ein Array, oder?

  • Funktion richtig einsetzen

    • littleman
    • 23. Februar 2017 um 08:46

    Hallo zusammen,

    habe eine Funktion, die ich gerne in meinem Code einbinden möchte.
    Ich komme mit den Funktionen noch nicht ganz klar.
    Welche Parameter muss ich mitgeben, wenn ich die Funktion aufrufe :)

    Code
    ; _ADGetGroupMemberOf
    Func _ADGetGroupMemberOf(ByRef $memberof, $groupdn, $sort = 0)
    	Local $oUsr, $objCommand, $groups
    
    
    	$objCommand = ObjCreate("ADODB.Command")
    	$objCommand.ActiveConnection = $objConnection
    	$objCommand.Properties("Searchscope") = 2
    
    
    	Dim $memberof[1]
    	$i = 0
    
    
    	While 1
    		$rangemodifier = $i * 1000
    		$range = "Range=" & $rangemodifier & "-" & $rangemodifier + 999
    		$strCmdText = "<LDAP://" & $strHostServer & "/" & $groupdn & ">;;memberof;" & $range & ";base"
    		$objCommand.CommandText = $strCmdText
    		$objRecordSet = $objCommand.Execute
    		$membersadd = $objRecordSet.fields(0).Value
    		If $membersadd = 0 Then ExitLoop
    		ReDim $memberof[UBound($memberof) + 1000]
    		For $j = $rangemodifier + 1 To $rangemodifier + 1000
    			$memberof[$j] = $membersadd[$j - $rangemodifier - 1]
    		Next
    		$i += 1
    		$objRecordSet.Close
    	WEnd
    
    
    	$rangemodifier = $i * 1000
    	$range = "Range=" & $rangemodifier & "-*"
    	$strCmdText = "<LDAP://" & $strHostServer & "/" & $groupdn & ">;;memberof;" & $range & ";base"
    	$objCommand.CommandText = $strCmdText
    	$objRecordSet = $objCommand.Execute
    	$membersadd = $objRecordSet.fields(0).Value
    	ReDim $memberof[UBound($memberof) + UBound($membersadd)]
    
    
    	For $j = $rangemodifier + 1 To $rangemodifier + UBound($membersadd)
    		$memberof[$j] = $membersadd[$j - $rangemodifier - 1]
    	Next
    	$objRecordSet.Close
    
    
    	$objCommand = 0
    	$objRecordSet = 0
    
    
    	$memberof[0] = UBound($memberof) - 1
    
    
    	If $sort = 1 Then
    		_ArraySort($memberof, 0, 1)
    	EndIf
    
    
    	Return $memberof[0]
    
    
    EndFunc   ;==>_ADGetGroupMemberOf
    Alles anzeigen
  • Compare im Edit_Fenster

    • littleman
    • 23. Februar 2017 um 08:42

    Ich habe es mit der Funktion lösen können.
    Die Funktione habe ich auch hier im Forum gefunden, finde den Beitrag aber nicht :)

    Code
    Func _ArrayCompare1($avArray1, $avArray2)
    	Local $avArray3[1] = [0], $iMax, $i
    	For $i = 1 To UBound($avArray1) - 1
    		If Not _c($avArray2, $avArray1[$i]) Then
    			$iMax = UBound($avArray3)
    			ReDim $avArray3[$iMax + 1]
    			$avArray3[$iMax] = $avArray1[$i]
    		EndIf
    	Next
    	$avArray3[0] = UBound($avArray3) - 1
    	Return $avArray3
    EndFunc
    Func _c($a, $v)
    	Local $i
    	For $i = 0 To UBound($a) - 1
    		If $a[$i] = $v Then Return True
    	Next
    	Return False
    EndFunc
    Alles anzeigen
  • Compare im Edit_Fenster

    • littleman
    • 17. Februar 2017 um 17:04

    Das funktioniert leider nicht wie gewollt.

    Ich habe jetzt beide Werte in ein Array geschrieben.
    Wie kann ich beide Arrays vergleichen und das doppelte rausschmeissen?
    Das wäre die einfachte Möglichkeit, oder?

  • Compare im Edit_Fenster

    • littleman
    • 17. Februar 2017 um 15:19

    Habe soweit jetzt die ausgelesenen Werte auf Edit1 in ein Array geschrieben und alles doppelten entfertn. Ausgabe mit _ArrayDisplay($arrayunique) sieht auch gut aus.
    Jetzt kopiere ist die gleichen Werte einfach mal in Edit2 und möchte in der Schleife einzelne Wörter vergleichen, doch er löscht mir alle aus dem Edit2, obwohl ich nur eins geändert habe.

    Bsp aus Edit1 ins Array -> Arra[Hund,Katze,Maus]
    Vergleich jetzt mit dem Text in Edit2

    Vorher

    Hund
    Katze
    Mausxxx


    Nach dem ausführen


    Hund Leer
    Katze Lerr
    Maus Leer


    Meine Umsetzung sollte so aussehen


    xxxx
    xxxx
    Mausxxx
    Code
    Case $aButton1
    			MsgBox($MB_OK,"","test")
    
    
    				$text1 = GUICtrlRead($aInput1)
    				$text2 = GUICtrlRead($aInput2)
    				$abfrage1 = (_PowerShell_Command('Get-ADPrincipalGroupMembership -Identity ' & $text1 & ' | select name | sort-object name'))
    
    
    				_GUICtrlEdit_SetText($aEdit1, $abfrage1)
    
    
    				$test=GUICtrlRead($aEdit1)
    				$array = StringSplit($test,@CRLF,3)
    				$arrayunique=_ArrayUnique($array)
    				$arraycount = UBound($arrayunique)
    				For $i = 0 To $arraycount -1
    
    
    					$test2=GUICtrlRead($aEdit2)
    					Local $sString = StringReplace($test2,$arrayunique[$i],"xxxx")
    
    
    					_GUICtrlEdit_SetText($aEdit2, $sString)
    				Next
    
    
    
    
    
    
    
    
    
    
    			MsgBox($MB_OK,"zahl",$arraycount)
    			MsgBox($MB_OK,"",$array[29])
    			_ArrayDisplay($arrayunique)
    Alles anzeigen
  • Compare im Edit_Fenster

    • littleman
    • 17. Februar 2017 um 13:07

    Du Profi :rock::rock: (ein Profi zaubert dir das wahrscheinlich in zwei Zeilen).
    Ich schaue mal und melde mich :P

  • Compare im Edit_Fenster

    • littleman
    • 17. Februar 2017 um 12:55

    Natürlich nicht, was soll ich den dabei lernen. :)
    Aber wenn ich String für String vergleiche, dann vergleiche ich immer die erste Zeile und dann die Zweite Zeile, aber in meinem Beiepiel können die gleichen Werte in unterschiedlicher Reihe stehen.

  • Compare im Edit_Fenster

    • littleman
    • 17. Februar 2017 um 12:44

    Aber die Ausgabe könnte so aussehen:


    Editor1 Editor2

    Name Name
    Hund Katze
    Katze Hund
    Maus Maus
    Ratte Fisch
    Fisch Kamel


    Ich würde dann wollen, dass das Ergebnis so aussieht

    Editor1 Editor2

    Name Name
    Ratte Kamel
  • Compare im Edit_Fenster

    • littleman
    • 17. Februar 2017 um 11:24

    Hallo Leutz,

    habe eine Frage. ich habe ein Code, welches mit Powershell Daten abruft und die gelistet in einem Editor aufführt.
    Jede Zeile hat einen Wert. Ich würde jetzt gerne beide Editoren vergleichen und gleiche Einträge löschen.
    Habt Ihr vielleicht einen Tipp?

    C
    #include <ButtonConstants.au3>
    #include <ComboConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <File.au3>
    #include <FileConstants.au3>
    #include <WinAPIFiles.au3>
    #include <GuiEdit.au3>
    #include <GuiMenu.au3>
    #include <adfunctions1.au3>
    #include <Constants.au3>
    
    
    $Form =GUICreate("Compare Gruppen User", 588, 563, 486, 200)
    					$aEdit1 = GUICtrlCreateEdit("", 32, 144, 241, 553)
    					GUICtrlSetData(-1, "Edit1")
    					$aEdit2 = GUICtrlCreateEdit("", 304, 144, 241, 553)
    					GUICtrlSetData(-1, "Edit2")
    					$aInput1 = GUICtrlCreateInput("Input1", 240, 72, 121, 21)
    					$aInput2 = GUICtrlCreateInput("Input2", 376, 72, 121, 21)
    					$aButton1 = GUICtrlCreateButton("Info", 240, 104, 257, 17)
    					$aLabel1 = GUICtrlCreateLabel("Vergleich Benutzer 1 und Benutzer 2", 24, 72, 177, 17)
    					GUISetState(@SW_SHOW)
    
    
    Func _PowerShell_Command($sCommand)
    					Local $iPID = Run(StringFormat('"%s" "%s"', 'C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe', $sCommand), @ScriptDir, @SW_HIDE, 0x2)
    					Local $sOut
    					Do
    						$sOut &= StdoutRead($iPID)
    					Until @error
    					StdioClose($iPID)
    					Return $sOut
    EndFunc
    
    
    
    
    While 1
    	$nMsg = GUIGetMsg()
    	Switch $nMsg
    		Case $GUI_EVENT_CLOSE
    			Exit
    		Case $aButton1
    			MsgBox($MB_OK,"","test")
    
    
    				$text1 = GUICtrlRead($aInput1)
    				$text2 = GUICtrlRead($aInput2)
    				$abfrage1 = (_PowerShell_Command('Get-ADPrincipalGroupMembership -Identity ' & $text1 & ' | select name | sort-object name'))
    				$abfrage2 = (_PowerShell_Command('Get-ADPrincipalGroupMembership -Identity ' & $text2 & ' | select name | sort-object name'))
    				_GUICtrlEdit_SetText($aEdit1, $abfrage1)
    				_GUICtrlEdit_SetText($aEdit2, $abfrage2)
    
    
    	EndSwitch
    WEnd
    Alles anzeigen

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™