Вызов скрипта Autoit из Powershell one
Это самый простой вариант.
PowerShell позволяет выполнять произвольные программы с помощью оператора вызова функции &
с указанием пути к программе и ее аргументов:
& "c:\path\to\program.exe" "parameter1" "parameter2" "parameter3"
так что в случае AutoIT для запуска скрипта вам нужно написать:
В 64-битной системе:
& "${env:ProgramFiles(x86)}\AutoIt3\AutoIt3.exe" "/AutoIt3ExecuteScript" "c:\your_script.au3"
В 32-битной системе:
& "${env:ProgramFiles}\AutoIt3\AutoIt3.exe" "/AutoIt3ExecuteScript" "c:\your_script.au3"
${env:ProgramFiles(x86)}
заменяет переменную среды, которая имеет полный путь к папке Program files (x86)
, скорее всего, c:\Program files (x86)
AutoIt3.exe
- это программа, которая на самом деле выполняет некомпилированные сценарии autoit (au3
текстовые файлы). /AutoIt3ExecuteScript
указывает ему выполнить следующий параметр как скрипт, но обычно его можно опустить.
Передача данных из AutoIT в PowerShell через файл
Существует много способов передачи данных из одного сценария в другой, однако наиболее надежный способ для новичков - хранение данных во временном текстовом файле, хотя это несколько неэффективно.
В скрипте AutoIT заменить строку, начинающуюся с MSGBOX
, на:
FileDelete("c:\myfile.txt")
FileWrite("c:\myfile.txt", $SUPERBARPOS[1])
Первая строка удаляет файл, если он уже существует - в противном случае он будет добавлен.
Вторая строка записывает содержимое $SUPERBARPOS[1]
в файл.
После завершения сценария вы можете просто открыть файл с помощью блокнота и проверить, содержит ли этот файл то, что вам нужно.
Чтение файла в Powershell также просто:
$myvar = [IO.File]::ReadAllText("c:\myfile.txt")
Копирует содержимое всего файла в переменную с именем $myvar
Передача данных без создания файлов
Конечно, засорение жесткого диска временными файлами - не самая оптимальная идея.
Хорошим способом передачи данных между программами, которые выполняются последовательно, являются каналы, особенно STDIN и STDOUT.
Для этого:
- Скомпилировать скрипт AutoIT как консольное приложение (см.
Autoit2exe
документация командной строки и / или #AutoIt3Wrapper_Change2CUI=y
директива редактора)
- Заменить строку
MSGBOX
чем-то вроде
ConsoleWrite($SUPERBARPOS[1] & @CRLF)
или аналогичный.
Это должно вывести переменную как текст в окно консоли
по умолчанию (вы не увидите его, если не запустите свой скрипт из
окно командной строки или powershell)
Чтобы вместо этого перенаправить текст в переменную, просто вызовите
Сценарий таков:
$myvar = & c:\your_script.exe
Если вам нужно передать несколько переменных, вам нужно разделить их на стороне PowerShell. Для этого вы можете захотеть сделать что-то вроде:
$a = $myvar -split "`r`n"
Преобразование скрипта в PowerShell
Поскольку AutoIT и PowerShell - это два совершенно разных языка, инструментов для автоматического преобразования не существует. Чтобы перевести код, вам нужно понять код AutoIT и вручную написать аналогичный код в PowerShell. Для этого вам, очевидно, нужно хорошо знать языки AutoIT и PowerShell.
Насколько я могу судить, этот скрипт в основном вызывает несколько функций DLL WinAPI. Автоматическая сторона процесса довольно хорошо описана в DllCall () . PowerShell позволяет это сделать с помощью Add-Type .
Если вы когда-либо сталкиваетесь с препятствиями во время преобразования, задайте более конкретный вопрос.