Gott sei Dank, es funktioniert! Hätte sonst mein bescheidenes Wissen von AD bzw. LDAP über den Haufen geworfen.
Beiträge von water
-
-
Wenn Du im Active Directory das Object "CN=NACHNAME\, VORNAME,OU=BLUBB,OU=Standorte,OU=BLUBB,DC=BLUBB,DC=BLUBB,DC=de" ansprechen willst , dann musst du das Komma escapen/maskieren.
Meinem Verständis nach müsste der Aufruf_ADDNToSamAccountName("CN=NACHNAME\, VORNAME,OU=BLUBB,OU=Standorte,OU=BLUBB,DC=BLUBB,DC=BLUBB,DC=de")
funktionieren.
Wenn Du bei dsquery statt dem * den FQDN angibts, dann wirst Du sicher auch das Komma escapen müssen, oder?Der Link zu http://www.autoitscript.com/forum/index.php?showtopic=106163 ist meine "Übersetzung" der adfunctions.au3 von John Clelland in eine komplette UDF (helpfile, Beispiele ...).
Die Funktionen sind großteils unverändert (mehr error checking etc.).// edit: Richtig heisst? "NACHNAME, VORNAME" oder "NACHNAME\, VORNAME"?
-
Da Du das Komma bereits "escaped" hast, sollte das eigentlich funtkionieren.
Bist Du sicher, dass es im AD mit Komma abgelegt ist? Falls jein, lade doch mal den ADExplorer von Sysinternals herunter (nun Teil von M$). Es ist keine Installation notwendig, lass die EXEC einfach laufen.
Poste hier bei Bedarf einen Screenshot, dann schaun wir mal ... -
-
Aus dem AutoIt Scriptomatic Tool habe ich folgenden Script kopiert - funktioniert aber leider auch nur für die lokalen Drucker bei remote PCs:
; Generated by AutoIt Scriptomatic
$wbemFlagReturnImmediately = 0x10
$wbemFlagForwardOnly = 0x20
$colItems = ""
$strComputer = "localhost"$Output=""
$Output = $Output & "Computer: " & $strComputer & @CRLF
$objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_Printer", "WQL", _
$wbemFlagReturnImmediately + $wbemFlagForwardOnly)If IsObj($colItems) then
For $objItem In $colItems
$Output = $Output & "Attributes: " & $objItem.Attributes & @CRLF
$Output = $Output & "Availability: " & $objItem.Availability & @CRLF
$strAvailableJobSheets = $objItem.AvailableJobSheets(0)
$Output = $Output & "AvailableJobSheets: " & $strAvailableJobSheets & @CRLF
$Output = $Output & "AveragePagesPerMinute: " & $objItem.AveragePagesPerMinute & @CRLF
$strCapabilities = $objItem.Capabilities(0)
$Output = $Output & "Capabilities: " & $strCapabilities & @CRLF
$strCapabilityDescriptions = $objItem.CapabilityDescriptions(0)
$Output = $Output & "CapabilityDescriptions: " & $strCapabilityDescriptions & @CRLF
$Output = $Output & "Caption: " & $objItem.Caption & @CRLF
$strCharSetsSupported = $objItem.CharSetsSupported(0)
$Output = $Output & "CharSetsSupported: " & $strCharSetsSupported & @CRLF
$Output = $Output & "Comment: " & $objItem.Comment & @CRLF
$Output = $Output & "ConfigManagerErrorCode: " & $objItem.ConfigManagerErrorCode & @CRLF
$Output = $Output & "ConfigManagerUserConfig: " & $objItem.ConfigManagerUserConfig & @CRLF
$Output = $Output & "CreationClassName: " & $objItem.CreationClassName & @CRLF
$strCurrentCapabilities = $objItem.CurrentCapabilities(0)
$Output = $Output & "CurrentCapabilities: " & $strCurrentCapabilities & @CRLF
$Output = $Output & "CurrentCharSet: " & $objItem.CurrentCharSet & @CRLF
$Output = $Output & "CurrentLanguage: " & $objItem.CurrentLanguage & @CRLF
$Output = $Output & "CurrentMimeType: " & $objItem.CurrentMimeType & @CRLF
$Output = $Output & "CurrentNaturalLanguage: " & $objItem.CurrentNaturalLanguage & @CRLF
$Output = $Output & "CurrentPaperType: " & $objItem.CurrentPaperType & @CRLF
$Output = $Output & "Default: " & $objItem.Default & @CRLF
$strDefaultCapabilities = $objItem.DefaultCapabilities(0)
$Output = $Output & "DefaultCapabilities: " & $strDefaultCapabilities & @CRLF
$Output = $Output & "DefaultCopies: " & $objItem.DefaultCopies & @CRLF
$Output = $Output & "DefaultLanguage: " & $objItem.DefaultLanguage & @CRLF
$Output = $Output & "DefaultMimeType: " & $objItem.DefaultMimeType & @CRLF
$Output = $Output & "DefaultNumberUp: " & $objItem.DefaultNumberUp & @CRLF
$Output = $Output & "DefaultPaperType: " & $objItem.DefaultPaperType & @CRLF
$Output = $Output & "DefaultPriority: " & $objItem.DefaultPriority & @CRLF
$Output = $Output & "Description: " & $objItem.Description & @CRLF
$Output = $Output & "DetectedErrorState: " & $objItem.DetectedErrorState & @CRLF
$Output = $Output & "DeviceID: " & $objItem.DeviceID & @CRLF
$Output = $Output & "Direct: " & $objItem.Direct & @CRLF
$Output = $Output & "DoCompleteFirst: " & $objItem.DoCompleteFirst & @CRLF
$Output = $Output & "DriverName: " & $objItem.DriverName & @CRLF
$Output = $Output & "EnableBIDI: " & $objItem.EnableBIDI & @CRLF
$Output = $Output & "EnableDevQueryPrint: " & $objItem.EnableDevQueryPrint & @CRLF
$Output = $Output & "ErrorCleared: " & $objItem.ErrorCleared & @CRLF
$Output = $Output & "ErrorDescription: " & $objItem.ErrorDescription & @CRLF
$strErrorInformation = $objItem.ErrorInformation(0)
$Output = $Output & "ErrorInformation: " & $strErrorInformation & @CRLF
$Output = $Output & "ExtendedDetectedErrorState: " & $objItem.ExtendedDetectedErrorState & @CRLF
$Output = $Output & "ExtendedPrinterStatus: " & $objItem.ExtendedPrinterStatus & @CRLF
$Output = $Output & "Hidden: " & $objItem.Hidden & @CRLF
$Output = $Output & "HorizontalResolution: " & $objItem.HorizontalResolution & @CRLF
$Output = $Output & "InstallDate: " & WMIDateStringToDate($objItem.InstallDate) & @CRLF
$Output = $Output & "JobCountSinceLastReset: " & $objItem.JobCountSinceLastReset & @CRLF
$Output = $Output & "KeepPrintedJobs: " & $objItem.KeepPrintedJobs & @CRLF
$strLanguagesSupported = $objItem.LanguagesSupported(0)
$Output = $Output & "LanguagesSupported: " & $strLanguagesSupported & @CRLF
$Output = $Output & "LastErrorCode: " & $objItem.LastErrorCode & @CRLF
$Output = $Output & "Local: " & $objItem.Local & @CRLF
$Output = $Output & "Location: " & $objItem.Location & @CRLF
$Output = $Output & "MarkingTechnology: " & $objItem.MarkingTechnology & @CRLF
$Output = $Output & "MaxCopies: " & $objItem.MaxCopies & @CRLF
$Output = $Output & "MaxNumberUp: " & $objItem.MaxNumberUp & @CRLF
$Output = $Output & "MaxSizeSupported: " & $objItem.MaxSizeSupported & @CRLF
$strMimeTypesSupported = $objItem.MimeTypesSupported(0)
$Output = $Output & "MimeTypesSupported: " & $strMimeTypesSupported & @CRLF
$Output = $Output & "Name: " & $objItem.Name & @CRLF
$strNaturalLanguagesSupported = $objItem.NaturalLanguagesSupported(0)
$Output = $Output & "NaturalLanguagesSupported: " & $strNaturalLanguagesSupported & @CRLF
$Output = $Output & "Network: " & $objItem.Network & @CRLF
$strPaperSizesSupported = $objItem.PaperSizesSupported(0)
$Output = $Output & "PaperSizesSupported: " & $strPaperSizesSupported & @CRLF
$strPaperTypesAvailable = $objItem.PaperTypesAvailable(0)
$Output = $Output & "PaperTypesAvailable: " & $strPaperTypesAvailable & @CRLF
$Output = $Output & "Parameters: " & $objItem.Parameters & @CRLF
$Output = $Output & "PNPDeviceID: " & $objItem.PNPDeviceID & @CRLF
$Output = $Output & "PortName: " & $objItem.PortName & @CRLF
$strPowerManagementCapabilities = $objItem.PowerManagementCapabilities(0)
$Output = $Output & "PowerManagementCapabilities: " & $strPowerManagementCapabilities & @CRLF
$Output = $Output & "PowerManagementSupported: " & $objItem.PowerManagementSupported & @CRLF
$strPrinterPaperNames = $objItem.PrinterPaperNames(0)
$Output = $Output & "PrinterPaperNames: " & $strPrinterPaperNames & @CRLF
$Output = $Output & "PrinterState: " & $objItem.PrinterState & @CRLF
$Output = $Output & "PrinterStatus: " & $objItem.PrinterStatus & @CRLF
$Output = $Output & "PrintJobDataType: " & $objItem.PrintJobDataType & @CRLF
$Output = $Output & "PrintProcessor: " & $objItem.PrintProcessor & @CRLF
$Output = $Output & "Priority: " & $objItem.Priority & @CRLF
$Output = $Output & "Published: " & $objItem.Published & @CRLF
$Output = $Output & "Queued: " & $objItem.Queued & @CRLF
$Output = $Output & "RawOnly: " & $objItem.RawOnly & @CRLF
$Output = $Output & "SeparatorFile: " & $objItem.SeparatorFile & @CRLF
$Output = $Output & "ServerName: " & $objItem.ServerName & @CRLF
$Output = $Output & "Shared: " & $objItem.Shared & @CRLF
$Output = $Output & "ShareName: " & $objItem.ShareName & @CRLF
$Output = $Output & "SpoolEnabled: " & $objItem.SpoolEnabled & @CRLF
$Output = $Output & "StartTime: " & WMIDateStringToDate($objItem.StartTime) & @CRLF
$Output = $Output & "Status: " & $objItem.Status & @CRLF
$Output = $Output & "StatusInfo: " & $objItem.StatusInfo & @CRLF
$Output = $Output & "SystemCreationClassName: " & $objItem.SystemCreationClassName & @CRLF
$Output = $Output & "SystemName: " & $objItem.SystemName & @CRLF
$Output = $Output & "TimeOfLastReset: " & WMIDateStringToDate($objItem.TimeOfLastReset) & @CRLF
$Output = $Output & "UntilTime: " & WMIDateStringToDate($objItem.UntilTime) & @CRLF
$Output = $Output & "VerticalResolution: " & $objItem.VerticalResolution & @CRLF
$Output = $Output & "WorkOffline: " & $objItem.WorkOffline & @CRLF
Next
ConsoleWrite($Output)
FileWrite(@TempDir & "\Win32_Printer.TXT", $Output )
Run(@Comspec & " /c start " & @TempDir & "\Win32_Printer.TXT" )
Else
Msgbox(0,"WMI Output","No WMI Objects Found for class: " & "Win32_Printer" )
EndifFunc 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 -
Klingt gut!
Mein Problem: Ich sitze in einem Firmen-Netzwerk und bekomme (vermutlich wegen der fehlenden Proxy-Authentifizierung) die Fehlermeldung "Sorry, but the database is currently offline!" -
Oder so. Verwendet ein Dummy-Field in der GUI:
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
#include <Guilistview.au3>
#include <WindowsConstants.au3>
#Include <Misc.au3>
#AutoIt3Wrapper_Run_Debug_Mode=n#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 633, 438, 192, 132)
$ListView1 = GUICtrlCreateListView("Input1|Input2|Input3|Input4", 16, 16, 601, 265)
Global $hLVHandle = GUICtrlGetHandle($ListView1)
_GUICtrlListView_SetColumn($hLVHandle, 0, "Input1", 130, 0)
_GUICtrlListView_SetColumn($hLVHandle, 1, "Input2", 130, 0)
_GUICtrlListView_SetColumn($hLVHandle, 2, "Input3", 130, 0)
_GUICtrlListView_SetColumn($hLVHandle, 3, "Input4", 130, 0)
$Input1 = GUICtrlCreateInput("", 16, 320, 129, 24)
GUICtrlSetState(-1, $GUI_FOCUS)
$Input2 = GUICtrlCreateInput("", 168, 320, 129, 24)
$Input3 = GUICtrlCreateInput("", 328, 320, 137, 24)
$Input4 = GUICtrlCreateInput("", 496, 320, 121, 24)$button = GUICtrlCreateButton("ADD", 250, 350, 100, 50)
Global $hCM = GUICtrlCreateContextMenu($ListView1) ; ein Kontextmenü für das Listview erstellen
Global $hCMDel = GUICtrlCreateMenuItem("Markierte Einträge löschen", $hCM) ; der 3. KontextmenüeintGlobal $hEnter = GUICtrlCreateDummy()
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###; Set accelerators for ENTER
Global $asAccelKeys[1][2] = [["{ENTER}", $hEnter]]
GUISetAccelerators($asAccelKeys);$dll = DllOpen("user32.dll")
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $hEnter
Switch ControlGetFocus("Form1")
Case "Edit1"
GUICtrlSetState($Input2,$GUI_FOCUS)
Case "Edit2"
GUICtrlSetState($Input3,$GUI_FOCUS)
Case "Edit3"
GUICtrlSetState($Input4,$GUI_FOCUS)
Case "Edit4"
GUICtrlSetState($Input1,$GUI_FOCUS)
_NewItem()
GUICtrlSetData($Input1,"")
GUICtrlSetData($Input2,"")
GUICtrlSetData($Input3,"")
GUICtrlSetData($Input4,"")
EndSwitch
Case $button
_NewItem()
Case $hCMDel
_GUICtrlListView_DeleteItemsSelected($hLVHandle)
EndSwitch
;Sleep(250)
WEndFunc _TestInput1()
Local $read = GUICtrlRead($Input1)
If StringLen($read) > 1 Then
MsgBox(1, "", "Ungültige Eingabe")
GUICtrlSetState($Input1, $GUI_FOCUS)
Else
GUICtrlSetData($Input1, "")
GUICtrlSetState($Input2, $GUI_FOCUS)
EndIf
EndFunc ;==>_TestInput1Func _TestInput2()
Local $read = GUICtrlRead($Input2)
If StringLen($read) > 2 Then
MsgBox(1, "", "Ungültige Eingabe")
GUICtrlSetState($Input2, $GUI_FOCUS)
Else
GUICtrlSetData($Input2, "")
GUICtrlSetState($Input3, $GUI_FOCUS)
EndIf
EndFunc ;==>_TestInput2Func _TestInput3()
Local $read = GUICtrlRead($Input3)
If StringLen($read) > 3 Then
MsgBox(1, "", "Ungültige Eingabe")
GUICtrlSetState($Input3, $GUI_FOCUS)
Else
GUICtrlSetState($Input4, $GUI_FOCUS)
EndIf
EndFunc ;==>_TestInput3Func _TestInput4()
_NewItem()
GUICtrlSetState($Input1, $GUI_FOCUS)
EndFunc ;==>_TestInput4Func _NewItem() ; Funktion zum auslesen der Eingabefelder (Neuer Eintrag bzw. Eintrag bearbeiten)
GUICtrlCreateListViewItem(GUICtrlRead($Input1) & "|" & GUICtrlRead($Input2) & "|" & GUICtrlRead($Input3) & "|" & GUICtrlRead($Input4), $ListView1)
EndFunc ;==>_NewItem -
Die Lesefunktionen für das Active Directory sind nun fertig.
Bevor ich jedoch mit den Schreibfunktionen beginne, benötige ich einen Freiwilligen der meine Ergebnisse testen kann, da ich keinen Schreibzugriff auf unser AD habe.
Freiwillige vor -
Ich würde das IE Objekt auch wieder beenden. Er startet für jeden Link then IE neu und irgendwann reicht Dein Hauptspeicher nicht mehr.
FileWrite($File & "\" & $name[2] & ".txt", $HTML)
_IEQuit($Object) -
Ich würde das nicht mit AdLibEnable machen sondern einfach in die "While true" Schlefie einbauen. Du änderst ja das GUI in der Checkdrive-Funktion, daher passt das sehr gut in die Schleife. Ausserdem führt AdLibEnable dazu, dass das Hauptscript während der Verarbeitung deiner Unterroutine steht.
While True
$msg = GUIGetMsg()
Switch $msg
Case $gui_event_close
Exit
Case $copybutton
$text1 = GUICtrlRead($moviename)
$text2 = GUICtrlRead($moviesession)
$text3 = GUICtrlRead($moviesessiondisc)
If $text1 = "" Then
MsgBox(0, "Fehler", "Die Eingabe des Titels ist erforderlich")
Else
start()
EndIf
Case Else
checkDrive()
EndSwitch
WEnd -
Gerne - Du meldest Dich einfach, falls es Probleme oder Fragen gibt.
-
Wenn Du "failed to login" verwendest, dann sollte aber auch die Datumsprüfung funktionieren.
Das Skript liest immer den letzten Satz und stellt fest, dass es Datum und Uhrzeit bereits verarbeitet hat, tut nichts und geht in den nächsten Loop. -
Tja, dann funzt aber das ganze Skript nicht
Der von Dir gewünschte Trigger-Text steht immer in der ZWEIT-letzten Zeile. Auf diese kann AutoIt aber leider nicht zugreifen (geht nur auf die letzte Zeile mit -1).
Wie groß wird das Log maximal und kann es wirklich gelöscht werden (brauchst Du die restlichen Einträge nicht)? -
Schön zu hören!
Das Problem mit dem Sleep ist Dir bewusst? Wenn während der Sleep-Zeit zwei oder mehr Zeilen in das Log geschrieben werden und eine/mehrere davon (abgesehen von der letzten Zeile) Deinen Trigger-Text enthalten, dann merkt das Skript nichts davon, da nur die letzte Zeile geprüft wird.
Kannst Du damit leben oder muss das auch abgefangen werden? -
Wenn der Text triggert und Dir die Nummern egal sind, dann sieht das Skript so aus:
HotKeySet("+!q", "Quit") ; HotKey to end the script Shift+Alt+Q
$hFile = FileOpen("C:\temp\Log.txt", 0)
Global $sOldDate = ""
While 1
$sLogEntry = FileReadLine($hFile, -1)
If @error = 0 Then
If StringInStr($sLogEntry,"does not match the expected the checksum") > 0 And $sOldDate <> StringLeft($sLogEntry, 14) Then
ShellExecute("WinWord.exe")
$sOldDate = StringLeft($sLogEntry, 14)
EndIf
EndIf
Sleep(2000) ; 2 Sekunden Pause
WEndFunc Quit()
Exit 0
EndFunc ;==>Quit -
Was triggert nun genau die Funktion in meinem Beispielscript? Der Text "does not match the expected the checksum" oder der Wert 3669493577?
Davon hängt dann ab, wie ich das Programm schreiben muss. -
Wenn das Skript von Beitrag 10 immer nur den Text auf der Console ausgibt, dann heisst das, dass der StringSPlit nicht erfolgreich war.
Sind Deine Zahlen tatsaechlich in Anfuehrungszeichen? -
OK. Hier der aktuellste Stand der zusätzlich noch dafür sorgt, dass für eine Zeile der Trigger nur einmal angezogen wird (d.h. Datum/Uhrzeit des Eintrags wird gespeichert und nur bei Änderung spricht der Trigger an).
HotKeySet("+!q", "Quit") ; HotKey to end the script Shift+Alt+Q
$hFile = FileOpen("C:\temp\Log.txt", 0)
Global $sOldDate = ""
While 1
$sLogEntry = FileReadLine($hFile, -1)
$aLogEntry = StringSplit($sLogEntry, '"')
If @error = 0 Then
If $aLogEntry[2] = "6766792" And $sOldDate <> StringLeft($sLogEntry,14) Then ; In $aLogEntry[4] steht dann der zweite Variable Wert
ShellExecute("WinWord.exe")
$sOldDate = StringLeft($sLogEntry,14)
EndIf
EndIf
Sleep(2000) ; 2 Sekunden Pause
WEndFunc Quit()
Exit 0
EndFunc ;==>Quit -
Ersetz das mal durch:
ShellExecute("WinWord.exe")
-
Was führst Du mit dem run-Befehl aus? Mein Script ist so gedacht, dass es nicht dauernd selbst gestartet werden muss.