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

Beiträge von _mk_

  • Diskpart

    • _mk_
    • 27. April 2016 um 15:43

    AspirinJunkie.

    Da hast Du recht. Ein Skript ist sehr statisch. Über das Auslesen mit Hilfe von list disk kann ich mir auch nicht sicher sein, dass ich genau das richtige Laufwerk erwische. Die Ausgabe von list disk liefert nicht genügend Informationen. Auf Grund der Größe kann ich nicht auf den richtigen Wechseldatenträger schließen. Da musste ich schon jeden Datenträger auswählen und mir die Details anschauen. Oder ich erstelle mir dynamisch mein Datenträgerpartitionierungsskript, indem ich vorher in der PowerShell mir die USB-Sticks auswerten lasse: Get-Disk | Where-Objekt -FilterScript {$PSItem.Bustype -eq 'USB'}. Die PowerShell kann ich auch aus dem AutoIT-Skript ausführen.

  • Diskpart

    • _mk_
    • 27. April 2016 um 07:19

    @stefanwue

    Rufe diskpart mit dem Parameter /s <Skript> auf. Der Parameter /s verwendet ein Datenträgerpartitionierungsskript. In dem Skript fasst Du Deine diskpart-Befehle zusammen.

  • Array aus Ini erstellen

    • _mk_
    • 26. April 2016 um 16:36
    AutoIt
    Const $FILEPATH = 'test.ini'
    Dim $Sections = IniReadSectionNames($FILEPATH)
    Dim $IDs[$Sections[0] + 1]
    Dim $Types[$Sections[0] + 1]
    Dim $Names[$Sections[0] + 1]
    Dim $Prices[$Sections[0] + 1]
    
    
    $IDs[0] = 'IDs'
    $Types[0] = 'Types'
    $Names[0] = 'Names'
    $Prices[0] = 'Prices'
    
    
    ConsoleWrite('Ini-File: ' & $FILEPATH & @CRLF)
    ConsoleWrite('Sectioncount: ' & $Sections[0] & @CRLF)
    
    
    For $i = 1 To $Sections[0]
    	ConsoleWrite('Section: ' & $Sections[$i] & @CRLF)
    	Dim $Elements = IniReadSection($FILEPATH, $Sections[$i])
    
    
    	; Die For-Schleife dient nur der Kontrolle. Die Schleife kann gelöscht werden.
    	For $j = 1 To $Elements[0][0]
    		ConsoleWrite('Key: ' & $Elements[$j][0] & '; Value: ' & $Elements[$j][1] & @CRLF)
    	Next
    	; ~~~~
    
    
    	$IDs[$i] = $Elements[1][1]
    	$Types[$i] = $Elements[2][1]
    	$Names[$i] = $Elements[3][1]
    	$Prices[$i] = $Elements[4][1]
    Next
    
    
    
    
    ; Diese Zeilen dienen ebenfalls zur Kontrolle und können ebenfalls gelöscht werden.
    _DumpArray($IDs)
    _DumpArray($Types)
    _DumpArray($Names)
    _DumpArray($Prices)
    
    
    Func _DumpArray($array)
    	ConsoleWrite($array[0] & @CRLF)
    
    
    	For $i = 1 To UBound($array) - 1
    		ConsoleWrite($array[$i] & @CRLF)
    	Next
    EndFunc   ;==>_DumpArray
    Alles anzeigen
  • Script frisst nur CPU lasst, das wars. Auf ClientPC funzt es ;) WMI

    • _mk_
    • 6. April 2016 um 10:27

    @Kev

    Da Deine WMI-Abfrage in PowerShell auf dem Windows 2012R2-Server funktioniert, rufe doch PowerShell aus Deinem AutoIt-Script auf und übergebe das Ergebnis wieder an Dein AutoIt-Script. Leider besteht die Rückgabe nicht aus Objekten, sondern die Ausgabe wird als Zeichenkette zurückgegeben.

    AutoIt
    AutoItSetOption('MustDeclareVars', 1)
    Const $STDOUT_CHILD = 2
    
    
    Dim $ScriptBlock = '{ $WmiDate = [System.Management.ManagementDateTimeConverter]::ToDmtfDateTime((Get-Date).AddDays(-15)); $EventLogEntries = Get-WmiObject -Query (""""SELECT * FROM Win32_NTLogEvent WHERE LogFile=''System'' AND EventCode=''10016'' AND TimeWritten>=''"""" + $WmiDate + """"''""""); $EventLogEntries.User}'
    Dim $PID = Run('powershell.exe -NoLogo -NoProfile -Command "& ' & $ScriptBlock & '"', @WindowsDir, @SW_HIDE, $STDOUT_CHILD)
    Dim $StdOutPut = ''
    
    
    While 1
    	$StdOutPut &= StdoutRead($PID)
    	If @error Then ExitLoop
    WEnd
    
    
    Dim $Users = StringSplit($StdOutPut, @CRLF, 1)
    For $i = 1 To $Users[0] - 1
    	ConsoleWrite($Users[$i] & @CRLF)
    Next
    Alles anzeigen
  • _FileWriteLog kann keine Logfiles schreiben ohne Datei zu öffnen

    • _mk_
    • 20. Februar 2016 um 00:21

    Aufgrund der Datenschutzbedenken würde ich das Namensschema der Log-Dateien dahin ändern, dass keine Rückschlüsse auf den Nutzer gemacht werden kann. Ebenfalls würde ich die NTFS-Berechtigung anpassen, dass der Benutzer auf seine Protokolldatei lesenden und schreibenden Zugriff erhält.

    Um Ordner und Dateien auszublenden, auf die ein Benutzer keine Zugriffsrechte hat, würde ich zusätzlich ABE (Zugriffsbasierte Aufzählung) auf den Dateiserver aktivieren.

    Genaue Einstellungen würde ich morgen nachmittag testen.

    Zu guter Letzt sollte dieses mit dem Betriebs- oder Personalrat geklärt sein.

  • erste schritte

    • _mk_
    • 19. Februar 2016 um 16:20

    Die Installation von 7-Zip kann unbeaufsichtigt durchgeführt werden. Dem Installer kannst Du Schalter mitgeben. Da brauchst Du keine Fenster automatisiert durchklicken.

    Schaue hier --> 7-Zip FAQs und hier --> WPKG - 7-Zip

  • _FileWriteLog kann keine Logfiles schreiben ohne Datei zu öffnen

    • _mk_
    • 19. Februar 2016 um 16:05

    Hallo Schokolade.

    Du musst die NTFS-Berechtigungen wie folgt anpassen. Wichtig: Bei Anwenden auf, Nur Dateien auswählen.

    Unbenannt1.PNG

  • RSA Verschlüsselung per DLL

    • _mk_
    • 4. August 2015 um 15:53

    Wer lesen kann, ist klar im Vorteil. Ich hatte es überlesen, dass Du ein asymmetrischen Verschlüsselungsverfahren suchst. Da wir gerade beim Lesen sind; in der Dokumentation zu CAPICOM von Microsoft steht alles, was Du brauchst.

    Hier der Quellcode zum Verschlüsseln ...


    AutoIt
    ; ============================================================================================================
    ; Name:				CAPICOM-Beispiel
    ; ------------------------------------------------------------------------------------------------------------
    ; Dlls:				capicom.dll
    ; Dokumentation:	https://msdn.microsoft.com/en-us/library/windows/desktop/aa375732(v=vs.85).aspx
    ; Download:			http://www.microsoft.com/en-us/download/details.aspx?id=25281
    ;
    ; Anmerkung:		Nach der Installation der CAPICOM-SDK musst die capicom.dll manuell registiert werden.
    ;					Dieses Beispiel wurde mit Windows 8.1 64-Bit Enterprise und AutoIt-Version 3.3.14.1
    ;					getestet.
    ; ============================================================================================================
    
    
    AutoItSetOption('MustDeclareVars', 1)
    
    
    ; CAPICOM_ENCRYPTION_ALGORITHM
    Dim Const $CAPICOM_ENCRYPTION_ALGORITHM_RC2 = 0 ; Use RSA RC2 encryption.
    Dim Const $CAPICOM_ENCRYPTION_ALGORITHM_RC4 = 1 ; Use RSA RC4 encryption.
    Dim Const $CAPICOM_ENCRYPTION_ALGORITHM_DES = 2 ; Use DES encryption.
    Dim Const $CAPICOM_ENCRYPTION_ALGORITHM_3DES = 3 ; Use triple DES encryption.
    Dim Const $CAPICOM_ENCRYPTION_ALGORITHM_AES = 4 ; Use the Advanced Encryption Standard(AES) algorithm.
    
    
    ; CAPICOM_ENCODING_TYPE
    Dim Const $CAPICOM_ENCODE_BASE64 = 0 ; Data is saved as a base64-encoded String
    Dim Const $CAPICOM_ENCODE_BINARY = 1 ; Data is saved as a pure binary sequence
    
    
    Dim $Store = ObjCreate('CAPICOM.Store') ; As IStore3
    ; Store.Open([ ByVal StoreLocation ], [ ByVal StoreName ], [ ByVal OpenMode ])
    $Store.Open()
    
    
    ; Certificates.Select([ ByVal Title ], [ ByVal DisplayString ], [ ByVal bMultiSelect ])
    Dim $Certificates = $Store.Certificates.Select('Zertifikate', 'Bitte Zertifikat auswählen ...') ; As ICertificates2
    If $Certificates >= 1 Then
    	Dim $Certificate = $Certificates.Item(1) ; As ICertificate2
    	ConsoleWrite('Ausgestellt für:              ' & $Certificate.GetInfo(0) & @CRLF)
    	ConsoleWrite('Ausgestellt von:              ' & $Certificate.GetInfo(1) & @CRLF)
    	ConsoleWrite('Privater Schlüssel vorhanden: ' & $Certificate.HasPrivateKey() & @CRLF)
    	ConsoleWrite('Version:                      ' & $Certificate.Version & @CRLF)
    	ConsoleWrite('Gültig ab:                    ' & $Certificate.ValidFromDate & @CRLF)
    	ConsoleWrite('Gültig bis:                   ' & $Certificate.ValidToDate & @CRLF)
    	ConsoleWrite('Seriennummer:                 ' & $Certificate.SerialNumber & @CRLF)
    	ConsoleWrite('Fingerabdruck:                ' & $Certificate.Thumbprint & @CRLF)
    	ConsoleWrite(@CRLF)
    
    
    	Dim $EnvelopedData = ObjCreate('CAPICOM.EnvelopedData') ; As IEnvelopedData
    	$EnvelopedData.Algorithm.Name = $CAPICOM_ENCRYPTION_ALGORITHM_RC4
    	$EnvelopedData.Content = 'Dies ist eine geheime Nachricht!'
    	$EnvelopedData.Recipients.Add($Certificate)
    
    
    	Dim $EncryptedText = $EnvelopedData.Encrypt($CAPICOM_ENCODE_BASE64) ; As String
    	ConsoleWrite('Verschlüsselter Text: ' & $EncryptedText & @CRLF)
    
    
    	Dim $EncryptedFile = FileOpen('EncryptedFile.txt', 1)
    	FileWriteLine($EncryptedFile, $EncryptedText)
    	FileClose($EncryptedFile)
    EndIf
    Alles anzeigen
  • RSA Verschlüsselung per DLL

    • _mk_
    • 4. August 2015 um 11:15
    AutoIt
    ; ============================================================================================================
    ; Name:				CAPICOM-Beispiel
    ; ------------------------------------------------------------------------------------------------------------
    ; Dlls:				capicom.dll
    ; Dokumentation:	https://msdn.microsoft.com/en-us/library/windows/desktop/aa375732(v=vs.85).aspx
    ; Download:			http://www.microsoft.com/en-us/download/details.aspx?id=25281
    ;
    ; Anmerkung:		Nach der Installation der CAPICOM-SDK musst die capicom.dll manuell registiert werden.
    ;					Dieses Beispiel wurde mit Windows 8.1 64-Bit Enterprise und AutoIt-Version 3.3.14.1
    ;					getestet.
    ; ============================================================================================================
    
    
    AutoItSetOption('MustDeclareVars', 1)
    
    
    Dim Const $CAPICOM_ENCRYPTION_ALGORITHM_RC2 = 0 ; Use RSA RC2 encryption.
    Dim Const $CAPICOM_ENCRYPTION_ALGORITHM_RC4 = 1 ; Use RSA RC4 encryption.
    Dim Const $CAPICOM_ENCRYPTION_ALGORITHM_DES = 2 ; Use DES encryption.
    Dim Const $CAPICOM_ENCRYPTION_ALGORITHM_3DES = 3 ;Use triple DES encryption.
    Dim Const $CAPICOM_ENCRYPTION_ALGORITHM_AES = 4 ; Use the Advanced Encryption Standard(AES) algorithm.
    Dim Const $SECRET_PASSWORD = 'Bzi9i/uEfgg'
    
    
    ; Verschlüsseln
    Dim $Encrypter = ObjCreate('CAPICOM.EncryptedData') ; As IEncryptedData
    $Encrypter.Content = 'Dies ist eine geheime Nachricht!'
    $Encrypter.SetSecret($SECRET_PASSWORD)
    $Encrypter.Algorithm.Name = $CAPICOM_ENCRYPTION_ALGORITHM_RC4
    Dim $EncryptedText = $Encrypter.Encrypt() ; As String
    
    
    ConsoleWrite('Verschlüsselter Text: ' &$EncryptedText & @CRLF)
    
    
    ; Entschlüsseln
    Dim $Encrypter = ObjCreate('CAPICOM.EncryptedData')
    $Encrypter.SetSecret($SECRET_PASSWORD)
    $Encrypter.Algorithm.Name = $CAPICOM_ENCRYPTION_ALGORITHM_RC4
    $Encrypter.Decrypt($EncryptedText)
    Dim $DecryptedText = $Encrypter.Content ; As String
    
    
    ConsoleWrite('Entschlüsselter Text: ' & $DecryptedText & @CRLF)
    Alles anzeigen
  • Prüfen ob lokaler Benutzer vorhanden ist

    • _mk_
    • 8. September 2014 um 15:38
    [autoit]

    ConsoleWrite(ExitsLocalUser("test"))

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

    Func ExitsLocalUser($name)
    Return IsObj(ObjGet(StringFormat('WinNT://localhost/%s,user', $name)))
    EndFunc ;==>ExitsLocalUser

    [/autoit]
  • LDAP Abfrage

    • _mk_
    • 13. Februar 2014 um 11:26

    Es stimmt leider, dass es doch etwas Zeit kostet, bis die Powershell geladen ist. Aus diesem Grunde habe ich immer eine Instanz von Powershell geöffnet. Bei Gelegenheit werde ich mal AutoIt und Powerhell gegeneinander antreten lassen und große Mengen im AD abfragen.

    Du hast auch damit recht, dass nicht alle cmdlets auf alle Rechner installiert sind. Sobald ich einen Server zum Domänencontroller hochstufe, werden die AD-Cmdlets installiert. Möchte ich meine Server remote verwalten, dann installiere ich die Remoteserver-Verwaltungstools auf meinen Administratorrechner oder ich könnte PS-Remoting auf dem Server aktivieren.

    Persönlich habe ich jahrelang auf AutoIt gesetzt. Vieles, was ich nicht mit VBScript machen konnte, konnte ich dann in AutoIt realisieren. Die Mächtigkeit von Powershell aber hat mich davon überzeugt, immer mehr Powershell-Skripte einzusetzen.

    Welches sind die Gründe, warum die AD-Udf nicht in den Standard aufgenommen werden soll?

  • LDAP Abfrage

    • _mk_
    • 13. Februar 2014 um 10:26

    Dies kann man auch von AutoIt behaupten. Natürlich kann ich Dich verstehen, dass immer mehr Benutzer Deine UDF verwenden sollen. Schließlich hast Du viel Arbeit in die AD-UDF gesteckt und Du möchtest, dass Deine UDF endlich zum Standardinstallationsumfang von AutoIt gehört.

    Da wir uns hier im Bereich des Forums befinden, welches sich nicht ausschließlich mit AutoIt beschäftigt, habe ich nur eine mögliche Alternative ausgezeigt. Powershell gehört zur Standardinstallation von Windows Server 2008 und jeder Domänencontroller hat die AD-Cmdlets bereits mitinstalliert. Viele administrative Werkzeuge setzen auf Powershell. Zum Beispiel ist der Active Directory Verwaltungscenter eine grafische Oberfläche zu den AD-Cmdlets. Als Systemadministrator sollte man sich unbedingt mit Powershell auseinander setzen. Die Server Core-Installation eines Windows Server 2008 lässt sich fast ausschließlich über die Shell verwalten.

  • LDAP Abfrage

    • _mk_
    • 12. Februar 2014 um 14:43

    Microsoft setzt immer mehr auf Powershell. Hier hast Du bereits eine Vielzahlt von cmdlets, um die AD zu administrieren. Am Besten schaust Du mal hier.

    Du kannst mit Powershell natürlich auch eine grafische Oberfläche erstellen, wenn es erwünscht ist.

  • csv Datei auslesen und in XML Datei umwandeln.

    • _mk_
    • 11. September 2013 um 08:37
    Spoiler anzeigen
    [autoit]


    ; Getestet unter Windows XP Professional mit SP 3
    ; Getestet unter Windows 7 Professional 32-Bit mit SP 1

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

    Const $adOpenStatic = 3

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

    Dim $filepath = FileOpenDialog('', '', 'CSV-Datei (*.csv)')
    If $filepath = -1 Then
    ConsoleWrite('! Abbruch durch den Benutzer' & @CRLF)
    Exit
    EndIf

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

    $fso = ObjCreate('Scripting.FileSystemObject')
    Dim $cnn = ObjCreate('ADODB.Connection')
    $cnn.Provider = 'Microsoft.Jet.OLEDB.4.0'

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

    ; ggf. den Delimiter inn der Registry anpassen.
    ; HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Text\Format
    $cnn.ConnectionString = StringFormat( _
    'Data Source=%s;Extended Properties="text;HDR=YES;FMT=Delimited"', _
    $fso.GetParentFolderName($filepath))
    $cnn.Open()

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

    Dim $rs = ObjCreate('ADODB.RecordSet')
    $rs.Open(StringFormat( _
    'SELECT * FROM [%s]', _
    $fso.GetFileName($filepath)), _
    $cnn, $adOpenStatic)

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

    Dim $xmlDoc = ObjCreate('Microsoft.XMLDOM')
    Dim $rootNode = $xmlDoc.createElement($fso.GetFileName($filepath))
    $xmlDoc.appendChild($rootNode)

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

    For $r = 0 To $rs.RecordCount - 1
    Dim $node = $xmlDoc.createElement('Datensatz')
    $rootNode.appendChild($node)
    For $field In $rs.Fields
    Dim $childNode = $xmlDoc.createElement($field.Name)
    $childNode.Text = $rs.Fields($field.Name).Value
    $node.appendChild($childNode)
    Next ; field
    $rs.MoveNext()
    Next ; r

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

    Dim $intro = $xmlDoc.createProcessingInstruction _
    ('xml', 'version=''1.0''')
    $xmlDoc.insertBefore _
    ($intro, $xmlDoc.childNodes(0))

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

    $xmlpath = FileSaveDialog('', $fso.GetParentFolderName($filepath), _
    'XML (*.xml)', 2, StringFormat('%s.xml', $fso.GetBaseName($filepath)))
    If @error Then
    ConsoleWrite('! Abbruch durch den Benutzer' & @CRLF)
    Exit
    EndIf
    $xmlDoc.Save($xmlpath)

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

    ShellExecute($xmlpath)

    [/autoit]
  • xls ohne Excel

    • _mk_
    • 12. August 2013 um 08:22

    @warhwolf.

    Der Artikel Verwendung von ADO mit Excel-Daten ... erklärt sehr ausführlich die Herangehensweise. Hier ist aber dennoch der kommentierte Quelltext.

    Spoiler anzeigen
    [autoit]

    ; SchemaEnum
    Const $adSchemaTables = 20

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

    ; CursorLocationEnum
    Const $adUseClient = 3

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

    ; Instanziirung der Connection-Klasse. Mit diesem Objekt wird eine dauerhafte Verbindung
    ; zu einer Datenquelle hergestellt.
    Dim $cn = ObjCreate('ADODB.Connection')

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

    ; OLEDB-Provider für die Verbindung festlegen.
    $cn.Provider = 'Microsoft.Jet.OLEDB.4.0'

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

    ; Es wird eine Verbindungszeichenfolge(Connection String auch Init String) erwartet. Die Zeichenfolge ist
    ; eine Reihenfolge von Attribut-Wert-Zuweisungen.
    $cn.ConnectionString = 'Data Source=' & @ScriptDir & '\Test.xls;Extended Properties=Excel 8.0;'

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

    ; Speicherort der Cursorbibliothekt setzen.
    $cn.CursorLocation = $adUseClient

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

    ; Eine Verbindung zur Datenquelle öffnen.
    $cn.Open()

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

    ; Die Datenbankschemainformationen ermitteln. Die OpenSchema-Methode gibt selbstbeschreibene
    ; Informationen üder die Datenquelle zurück.
    ; Tabellen zurückgeben
    Dim $rsTables = $cn.OpenSchema($adSchemaTables)
    ConsoleWrite('Anzahl Tabellenblätter: ' & $rsTables.RecordCount & @CRLF)

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

    ; Iterationen über alle Tabellen
    For $t = 1 To $rsTables.RecordCount
    ConsoleWrite(@CRLF)

    ; Gibt den Tabellennamen zurück
    Dim $tableName = $rsTables.Fields('TABLE_NAME').Value
    ConsoleWrite('Tabelle: ' & $tableName & @CRLF)
    ConsoleWrite('----------------------' & @CRLF)

    ; Ausgabe der Eigenschaften mit deren Werte
    For $f = 0 To $rsTables.Fields.Count - 1
    ConsoleWrite(' ' & $rsTables.Fields($f).Name & ' = ' & $rsTables.Fields($f).Value & @CRLF)
    Next ; f

    ; Array für die Abfragekriterien
    Dim $criterias[4]
    $criterias[2] = $tableName

    ; Gibt die Spalten der Tabelle zurück
    ; adSchemaColumns = 4
    Dim $rsColumns = $cn.OpenSchema(4, $criterias)
    ConsoleWrite(@CRLF & ' Anzahl Spalten: ' & $rsColumns.RecordCount & @CRLF)

    ; SQL Statement ausführen. Wird nur der Tabellenname angegeben, vervollständig ADO automatisch
    ; die SQL-Anweisung. "SELECT * FROM [<tablename>]"
    Dim $rs = $cn.Execute('[' & $tableName & ']')

    ; Iteration über alle Spalten
    For $c = 1 To $rsColumns.RecordCount

    ; Gibt Spaltennamen zurück
    Dim $columnName = $rsColumns.Fields('COLUMN_NAME').Value
    ConsoleWrite(@CRLF & ' Spalte: ' & $columnName & @CRLF)
    ConsoleWrite(' ----------------------' & @CRLF)

    ; Ausgabe der Eigenschaften mit deren Werte
    For $f = 0 To $rsTables.Fields.Count - 1
    ConsoleWrite(' ' & $rsColumns.Fields($f).Name & ' = ' & $rsColumns.Fields($f).Value & @CRLF)
    Next ; f

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

    ConsoleWrite(@CRLF)
    ConsoleWrite(' Ausgabe Zeilen:' & @CRLF)

    ; Springt zum ersten Datensatz
    $rs.MoveFirst()

    ; Iteration über alle Datensätze
    For $r = 0 To $rs.RecordCount - 1

    ; Ausgabe der Werte
    ConsoleWrite(' ' & $rs.Fields($columnName).Value & @CRLF)

    ; zum nächsten Datensatz springen
    $rs.MoveNext()
    Next ; r <-- Daten

    ; zum nächsten Datensatz springen
    $rsColumns.MoveNext()
    Next ; $c <-- Spalten

    ; Geöffnete Verbindungen schliesen
    $rs.Close()
    $rsColumns.Close()

    ; zum nächsten Datensatz springen
    $rsTables.MoveNext()
    Next ; $t <-- Tabellen

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

    ; Geöffnete Verbindungen schliesen
    $rsTables.Close()
    $cn.Close()

    [/autoit]
  • xls ohne Excel

    • _mk_
    • 9. August 2013 um 08:10

    Mittels ActiveX Data Objects(ADO) kannst Du Excel-Arbeitsmappe auslesen:

    [autoit]


    Const $adSchemaTables = 20
    Const $adUseClient = 3

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

    Dim $cn = ObjCreate('ADODB.Connection')
    $cn.Provider = 'Microsoft.Jet.OLEDB.4.0'
    $cn.ConnectionString = 'Data Source=' & @ScriptDir & '\Test.xls;Extended Properties=Excel 8.0;'
    $cn.CursorLocation = $adUseClient
    $cn.Open()

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

    Dim $rsTables = $cn.OpenSchema($adSchemaTables)
    ConsoleWrite('Anzahl Tabellenblätter: ' & $rsTables.RecordCount & @CRLF)

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

    For $t = 1 To $rsTables.RecordCount
    ConsoleWrite(@CRLF)
    Dim $tableName = $rsTables.Fields('TABLE_NAME').Value
    ConsoleWrite('Tabelle: ' & $tableName & @CRLF)
    ConsoleWrite('----------------------' & @CRLF)

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

    For $f = 0 To $rsTables.Fields.Count - 1
    ConsoleWrite(' ' & $rsTables.Fields($f).Name & ' = ' & $rsTables.Fields($f).Value & @CRLF)
    Next ; f

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

    Dim $criterias[4]
    $criterias[2] = $tableName
    Dim $rsColumns = $cn.OpenSchema(4, $criterias)
    ConsoleWrite(@CRLF & ' Anzahl Spalten: ' & $rsColumns.RecordCount & @CRLF)
    Dim $rs = $cn.Execute('[' & $tableName & ']')
    For $c = 1 To $rsColumns.RecordCount
    Dim $columnName = $rsColumns.Fields('COLUMN_NAME').Value
    ConsoleWrite(@CRLF & ' Spalte: ' & $columnName & @CRLF)
    ConsoleWrite(' ----------------------' & @CRLF)

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

    For $f = 0 To $rsTables.Fields.Count - 1
    ConsoleWrite(' ' & $rsColumns.Fields($f).Name & ' = ' & $rsColumns.Fields($f).Value & @CRLF)
    Next ; f

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

    ConsoleWrite(@CRLF)
    ConsoleWrite(' Ausgabe Zeilen:' & @CRLF)
    $rs.MoveFirst()
    For $r = 0 To $rs.RecordCount - 1
    ConsoleWrite(' ' & $rs.Fields($columnName).Value & @CRLF)
    $rs.MoveNext()
    Next ; r

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

    $rsColumns.MoveNext()
    Next ; $c

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

    $rs.Close()
    $rsColumns.Close()
    $rsTables.MoveNext()
    Next ; $t

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

    $rsTables.Close()
    $cn.Close()

    [/autoit]
  • Netzwerk Problem

    • _mk_
    • 18. April 2013 um 06:46

    Diggidie

    Vielleicht hilft Dir dieses Skript weiter:

    [autoit]

    ; Link: http://msdn.microsoft.com/en-us/library/…4(v=vs.85).aspx
    ; Link: http://msdn.microsoft.com/en-us/library/…9(v=vs.85).aspx

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

    Dim $fileshares = ObjGet('WinNT://./lanmanserver') ; As IADsFileService

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

    For $share In $fileshares
    ConsoleWrite(StringFormat('Freigabe:\t%s\n', $share.Name))
    ConsoleWrite(StringFormat('Lokaler Pfad:\t%s\n', $share.Path))
    ConsoleWrite(StringFormat('Beschreibung:\t%s\n', $share.Description))
    Next ; $share

    [/autoit]
  • Gruppenzugehörigkeit per LDAP ermitteln

    • _mk_
    • 12. März 2013 um 07:19
    [autoit]


    AutoItSetOption('MustDeclareVars', 1)
    Global $Err = ObjEvent('AutoIt.Error', '_ComErr')

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

    Dim $user = ObjGet('LDAP://cn=Lemon,ou=Becks,dc=Bier,dc=local') ; As IADsUser
    _GetGroups($user)

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

    Func _GetGroups($ADsObject)
    ; Die ADSI-Methode 'GetEx' gibt IMMER ein Array zurück!!!
    Dim $memberOf = $ADsObject.GetEx('memberOf')
    For $groupDN In $memberOf
    Dim $group = ObjGet('LDAP://' & $groupDN) ; As IADsGroup
    ConsoleWrite('Gruppe: ' & $group.cn & @CRLF)
    _GetGroups($group)
    Next
    EndFunc ;==>_GetGroups

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

    Func _ComErr()
    ;ConsoleWrite(StringFormat('\tFehlernummer: %s\n', Hex($Err.Number, 8)))
    ;ConsoleWrite(StringFormat('\tBeschreibung: %s\n', $Err.Windescription))
    ;ConsoleWrite(StringFormat('\tSkriptzeile: %s\n', $Err.Scriptline))
    SetError(1)
    EndFunc ;==>_ComErr

    [/autoit]
  • _AD_IsMemberOf aus AD.au3 - Untergruppen erkennen

    • _mk_
    • 7. Januar 2013 um 09:18

    @F1109

    Die Active Directory-UDF von water benutze ich nicht, aber so solltest Du verschachtelte Gruppenmitgliedschaften auslesen können.

    [autoit]


    Global $Err = ObjEvent('AutoIt.Error', '_ComErr')

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

    Func _IsMember($UserDN, $GroupDN)
    Local $Group = ObjGet('LDAP://' & $GroupDN) ; As IADsGroup
    For $Member In $Group.Members
    If StringLower($Member.Class) = 'group' Then
    If _IsMember($UserDN, $Member.distinguishedName) Then
    Return True
    EndIf
    Else
    If StringLower($Member.distinguishedName) = $UserDN Then
    Return True
    EndIf
    EndIf
    Next ; $Member
    Return False
    EndFunc ;==>_IsMember

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

    Func _ComErr()
    ConsoleWrite(StringFormat('\tFehlernummer: %s\n', Hex($Err.Number, 8)))
    ConsoleWrite(StringFormat('\tBeschreibung: %s\n', $Err.Windescription))
    SetError(1)
    EndFunc ;==>_ComErr

    [/autoit]
  • Suche nach 0 Byte Files in Verzeichnissen

    • _mk_
    • 21. Dezember 2012 um 08:56

    Die Technologie "Windows Management Instrumentation" (WMI) ermöglicht neben den Zugriff auf alle Arten von Systeminformationen, auch den Zugriff auf das Dateisystem. Solltest Du entfernte Computer abfragen müssen, hilft Dir die Möglichkeit mittels WMI auch auf entferne Systeme zugreifen zu können; vorausgesetzt Du hast die notwendigen Rechte (WMI-Remoting)

    Spoiler anzeigen
    [autoit]


    AutoItSetOption('MustDeclareVars', 1)
    _ListNullByteFiles('c:\windows', True)

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

    Func _ListNullByteFiles($FolderPath, $Recurse = False, $Computer = '.')
    Local $WMIService = ObjGet(StringFormat('winmgmts:\\\%s\\root\\cimv2', $Computer))
    Local $FolderList = $WMIService.ExecQuery( _
    StringFormat( _
    'Associators of {Win32_Directory.Name=''%s''} ' & _
    'WHERE AssocClass = Win32_Subdirectory ' & _
    'ResultRole = PartComponent', $FolderPath))

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

    For $Folder In $FolderList
    ConsoleWrite(StringFormat('Verzeichnis: %s\n', $Folder.Name))

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

    ; --- Verzeichnispfad "escapen"
    Local $Parts = StringSplit($Folder.Name, '\')
    Local $Path = ''
    For $i = 2 To UBound($Parts) - 1
    $Path = StringFormat('%s\\\%s', $Path, $Parts[$i])
    Next
    $Path = StringFormat('%s\\\', $Path)
    ; ---

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

    Local $FileList = $WMIService.ExecQuery( _
    StringFormat( _
    'SELECT FileName, FileSize ' & _
    'FROM CIM_DataFile ' & _
    'WHERE Path = ''%s'' AND FileSize = 0', $Path))

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

    For $File In $FileList
    ConsoleWrite(StringFormat('\t%s %s Byte\n', _
    $File.FileName, $File.FileSize))
    Next ; File

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

    If $Recurse Then
    _ListNullByteFiles($Folder.Name)
    EndIf
    Next ; $Folder
    EndFunc ;==>_ListNullByteFile

    [/autoit]

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™