Hallo Chris,
ich mache es immer so.
Zuerst das _WD_Shutdown() , dann _WDeleteSession($sSession) .
Gruß Marcel
Hallo Chris,
ich mache es immer so.
Zuerst das _WD_Shutdown() , dann _WDeleteSession($sSession) .
Gruß Marcel
Racer, schau ich mir an.
Schnuffel, die Exe Tools laufen nur intern.
Mit einem Zertifikat bzw. dem Signieren soll ja erreicht werden, dass diese nicht vom Antivierenprogramm geblockt werden. Deshalb war ja mein Gedanke, dass ich ein gekauftes Zertifikat nutze. Gekaufte Zertifikate sind aber max. nur 1 Jahr gültig. dann müsste man diese erneuern.
Nach erstem Test so wie oben im Quelltext angegeben, funktioniert es ja. Das in Autoit erstellte Tool wird nicht mehr geblockt.
Ich teste das einfach die nächsten Wochen/ Monate so und berichte die Erfahrungen daraus.
Gruß gmmg
die Antivieren Software blockiert die Anwendung, obwohl diese vorher gescannt wurde und es hier keine Probleme beim scannen gab.
Nach mehrmaligem neu kompilieren funktioniert das Ausführen dann auch irgendwann. Wenn ich hingegen beim kompilieren direkt Signiere, tritt das Problem überhaupt nicht auf.
Deshalb die Aussage das es "Nervt".
Die Seite aus dem engl. Forum ist mir bekannt.
Danke
Gruß Marcel
Hallo Zusammen,
es gab im Forum schon einige Ansätze zum Signieren einer in Autoit geschriebenen Exe.
Da mich unser Antiviren Tool immer mal nervt, habe ich folgenden Lösungsansatz gefunden. Dieser funktioniert für unseren Einsatzzweck bisher problemlos.
Ich habe mir das signtool installiert und füge folgende Zeile an den Anfang des Scriptes:
#AutoIt3Wrapper_Run_After=""%ProgramFiles(x86)%\Windows Kits\10\bin\10.0.26100.0\x86\signtool.exe" sign /tr http://timestamp.digicert.com/scripts/timestamp.dll /td SHA256 /fd SHA256 /a "%out%""
Die entsprechende Exe ist dann digital Signiert.
Wie binde ich aber hier ein Zertifikat ein oder ist das nicht nötig, da dies ja auch nur 1 Jahr gültig ist?
Gruß gmmg
Das ist ohne dein Script zu kennen schwierig zu beantworten, da es verschiedene Ansätze gibt.
Schau dir einmal das "Getting started example" Script im Abschnitt "create capabilites for session" auf der folgenden Webseite an, da sollte das klar werden.
Ansonsten poste doch mal dein Script (ohne URL und Passwörter)
Hier mal ein Beispiel zum Login für Autoit, so wie ich das mache. Achtung hier wird noch die Chrome Version anhand der GoogleChrome.exe ausgelesen. Das müsstest du an deine Gegebenheiten anpassen.
#include "wd_helper.au3"
#include "wd_core.au3"
Local $file
$GoogleChrome64bit = "C:\Program Files\Google\Chrome\Application\chrome.exe"
$GoogleChrome32bit = "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"
If FileExists($GoogleChrome64bit) Then $file = $GoogleChrome64bit
If FileExists($GoogleChrome32bit) Then $file = $GoogleChrome32bit
If FileExists($file) Then
$google_chrome_version = FileGetVersion($file)
$google_chrome_version_array = StringSplit($google_chrome_version,".")
$webdriver = "chromedriver_" & $google_chrome_version_array[1] & ".exe"
If Not FileExists(@ScriptDir & '\data\'& $webdriver) Then
MsgBox(0,"Info","Google Chromedriver nicht vorhanden." & @CRLF & $webdriver)
Exit
EndIf
Else
MsgBox(0,"Info","Google Chrome in folgenden Pfad nicht vorhanden." & @CRLF & @CRLF & $file)
Exit
EndIf
$user = ""
$pass = ""
$_WD_DEBUG = $_WD_DEBUG_None ;set to $_WD_DEBUG_None before compiling.
;Global $_WD_DRIVER
Local $sDesiredCapabilities
Local $iIndex
$url = "https://autoit.de/wcf/login/?url=https%3A%2F%2Fautoit.de%2F"
SetupChrome()
_WD_Startup()
$sSession = _WD_CreateSession($sDesiredCapabilities)
_WD_Window($sSession, "Maximize", "{}")
_WD_Navigate($sSession, $url)
_WD_LoadWait($sSession, 1500)
;WinSetState ("","",@SW_MAXIMIZE)
_WD_WaitElement($sSession, $_WD_LOCATOR_ByXPath, "//*[@id='username']")
;ConsoleWrite("+ @error = " & @error & @CRLF)
$sElement_user = _WD_FindElement($sSession, $_WD_LOCATOR_ByXPath, "//*[@id='username']")
_WD_WaitElement($sSession, $_WD_LOCATOR_ByXPath, "//*[@id='password']")
;ConsoleWrite("+ @error = " & @error & @CRLF)
$sElement_pass = _WD_FindElement($sSession, $_WD_LOCATOR_ByXPath, "//*[@id='password']")
If @error = $_WD_ERROR_Success Then
_WD_ElementAction($sSession, $sElement_user, 'value',$user)
EndIf
If @error = $_WD_ERROR_Success Then
_WD_ElementAction($sSession, $sElement_pass, 'value',$pass)
EndIf
Sleep(1000)
;Send("{ENTER}")
$sElement = _WD_FindElement($sSession, $_WD_LOCATOR_ByXPath, "/html/body/div[1]/section/div/div/div[1]/form/section[1]/div/input[1]")
;_WD_HighlightElement($sSession, $sElement, 3)
If @error = $_WD_ERROR_Success Then
_WD_ElementAction($sSession, $sElement, 'click')
Sleep(500)
EndIf
_WD_Shutdown()
_WD_DeleteSession($sSession)
Exit
Func SetupChrome()
;_WD_Option('Driver', 'chromedriver.exe')
_WD_Option('Driver', 'data\'& $webdriver)
_WD_Option('Port', 9515)
_WD_Option('DriverParams', '--log-path="' & @UserProfileDir & '\chrome.log"')
_WD_Option('DriverParams')
$sDesiredCapabilities = '{"capabilities": {"alwaysMatch": {"unhandledPromptBehavior": "ignore", ' & _
'"goog:chromeOptions": {"w3c": true, "excludeSwitches": ["enable-automation"], "useAutomationExtension": false, ' & _
'"prefs": {"credentials_enable_service": false},' & _
'"args": ["--disable-search-engine-choice-screen"] }}}}'
EndFunc
Alles anzeigen
Gruß gmmg
ab Google Version 128 kommt auch immer die Abfrage nach der Standard Suchmaschine.
Diese kann man in den $sDesiredCapabilities im Abschnitt "args" mit dem Eintrag "--disable-search-engine-choice-screen" definieren. Zumindest funktioniert das bei uns.
$sDesiredCapabilities = '{"capabilities": {"alwaysMatch": {"unhandledPromptBehavior": "ignore", ' & _
'"goog:chromeOptions": {"w3c": true, "excludeSwitches": ["enable-automation"], "useAutomationExtension": false, ' & _
'"prefs": {"credentials_enable_service": false},' & _
'"args": ["--start-maximized", "--disable-search-engine-choice-screen"] }}}}'
eventuell musst du das so benutzen: _WD_CapabilitiesAdd("args", "disable-search-engine-choice-screen")
Ja, denke auch das Chrome betroffen ist, habe ich aber nicht getestet.
Eventuell steht im engl Forum was. (link im post weiter oben)
Die "_WD_Option" Bereich ist da bestimmt auch anzupassen.
OK, die Lösung aus dem engl. Forum.
Man muss den Port bei den Driver Parametern auch mit angeben.
Folgend eine dynamische Lösung von Danp2 bzw. mLipok
Local $iPort = _WD_GetFreePort(5555, 5600)
If @error Then Return SetError(@error, @extended, 0)
_WD_Option('Port', $iPort)
_WD_Option('DriverParams', '--port=' & $iPort & ' --verbose --log-path="' & @ScriptDir & '\chrome.log"')
Gruß gmmg
Moombas der folgende Abschnitt im Script funktioniert bei mir und verhindert die Abfrage der Standard Suchmaschine.
'"args": ["--start-maximized", "--disable-search-engine-choice-screen"] }}}}'
Mein Problem ist aktuell, dass der neue Chromedriver in Version 128 beim Google Chrome Version 128 nicht funktioniert.
Setze ich hingegen den Chromedriver 127 und Google Chrome 128 ein funktioniert es ohne Probleme.
Reinerm In deinem Link ist der jüngste Eintrag der 8.09.2023, also fast 1 Jahr alt. Das Problem tritt ja aber erst seit Google Chrome Version 128 auf und nur in Zusammenhang mit Chromedriver 128 auf.
Was hast du denn genau umgebaut?
Gruß gmmg
Hallo Zusammen,
ich habe festgestellt, dass mit dem aktuellen Chromedriver "https://storage.googleapis.com/chrome-for-testing-public/128.0.6613.84/win32/chromedriver-win32.zip" sich keine Website mehr über Google Chrome Version 128.x öffnen lässt.
Als Workaround habe ich jetzt die letzte 127.x Version benutzt.
Hat da jemand auch aktuell Probleme?
Auch kommt ab Google Version 128 auch immer die Abfrage nach der Standard Suchmaschine.
Diese kann man in den $sDesiredCapabilities im Abschnitt "args" mit dem Eintrag "--disable-search-engine-choice-screen" definieren.
$sDesiredCapabilities = '{"capabilities": {"alwaysMatch": {"unhandledPromptBehavior": "ignore", ' & _
'"goog:chromeOptions": {"w3c": true, "excludeSwitches": ["enable-automation"], "useAutomationExtension": false, ' & _
'"prefs": {"credentials_enable_service": false},' & _
'"args": ["--start-maximized", "--disable-search-engine-choice-screen"] }}}}'
Gruß gmmg
Folgende Links behandeln auch das Handshake Thema. Eventuell lassen sich da Infos gewinnen.
https://learn.microsoft.com/en-us/answers/…iled-(dbnetlib)(connectionopen
Code4Fun liegt es wirklich an der Verbindung oder an der Func _SQLQuery
Im MS Access musste ich auch die EOF abfragen.
This is how I changed it and it seems to have fixed the issue:
$sqlCon = ObjCreate("ADODB.Connection")
$sqlCon.Open($ConnectionString)
$sqlRs = ObjCreate("ADODB.Recordset")
$sqlRs.Open ($query, $sqlCon)
While not $sqlRs.EOF
$Checked = $sqlRs.GetRows
Wend
Gruß Marcel
Da gibt es mehrere Ansätze bzw. fertige Software
Lithnet Idle Logoff Group Policy Administrative Templates
Gruß gmmg
oder um das mit deinem Script zu machen. die Description muss natürlich auch im AD gesetzt sein.
_AD_Open()
; Globale Variable für Computer
Global $aComputers
;$sOU = $strDNSDomain
$sOU = "OU=OU1234,DC=Domain,DC=int" ;muss angepasst werden
; AD-Abfrage, um nur Computer zu holen, deren Name mit "A" oder "N" beginnt
$aComputers = _AD_GetObjectsInOU($sOU, "(&(objectclass=computer)(|(name=F*)(name=N*)))", 2, "name,operatingSystem,description")
; Ausgabe der gefundenen Computer
_ArrayDisplay($aComputers)
_AD_Close()
Alles anzeigen
hier mal ein Beispiel.
Um die Beschreibung vom Computer herauszubekommen muss das $ an gehangen werden.
_AD_GetObjectAttribute($aObjects[$i][0] & "$", "description")
#include <D:\scripte\AD_1.6.2.0_Functions\AD.au3> ;AD.au3 von Water -> Pfad muss angepasst werden
#include <Array.au3>
local $serverArray [1]
local $clientsArray [1][2] ;2D Array
_AD_Open()
$sOU = "OU=eureOU,DC=domain,DC=int" ;muss angepasst werden
$aObjects = _AD_GetObjectsInOU($sOU, "(objectclass=computer)", 2, "name,operatingSystem")
_ArrayDisplay($aObjects) ; alle Computer
If @error > 0 Then
MsgBox(64, "", "Nichts gefunden")
Else
For $i = 1 To $aObjects[0][0]
$fill = ""
;MsgBox(0,"", $aObjects[$i][1])
$server = StringLeft ($aObjects[$i][1],14)
$clients = StringLeft ($aObjects[$i][1],10)
;MsgBox(0,"",$server)
IF $server = "Windows Server" Then
;MsgBox(0,"",$aObjects[$i][0])
_ArrayAdd($serverArray, $aObjects[$i][0])
EndIf
IF $clients = "Windows 10" Or $clients = "Windows 11" Then
$description = _AD_GetObjectAttribute($aObjects[$i][0] & "$", "description")
;MsgBox(0,$aObjects[$i][0],$description)
$fill = $aObjects[$i][0] & "|" & $description
_ArrayAdd($clientsArray, $fill)
EndIf
Next
_ArrayDisplay($serverArray) ; Server Array
_ArrayDisplay($clientsArray) ; Clients Array
EndIf
_AD_Close()
Alles anzeigen