Конвертировать пакет в PowerShell, вызывая скрипты Python
У меня есть пакетный скрипт, который вызывает Python, а затем запускает программу Python.
Вместо того, чтобы использовать пакетный скрипт, я бы хотел использовать PowerShell.
Я не программист и не сценарист, и я безуспешно гуглил и исследовал, как получить правильный синтаксис. При тестировании я использовал несколько команд: invoke-item, invoke-command, set- и get-variable и некоторые другие, которые я забыл, и т. Д.
Может ли кто-нибудь предоставить мне правильный синтаксис PowerShell для вызова сначала, исполняемый файл Python, а затем сам скрипт Python?
Сокращенный пакетный скрипт встроен вместе со скриптом Python, который работает как надо.
Заранее спасибо.
echo off
set winpy=C:\Users\AIODUDE.AIODUDE-PC\Downloads\WPy-3710\python-3.7.1.amd64\
if EXIST %winpy% (
"%winpy%python.exe" "%~dp0HBSS_XML_Parser_Driver_Action.py" )
Вызывается сценарий Python
import HBSS_Classes, os, HIPS_8_FW_XML_Parser_Action
hbss_parser = HBSS_Classes.HBSSXMLParser()
xmlfiles = []
print('############################')
print('# UNDER ACTIVE DEVELOPMENT #')
print('############################\n')
print("HBSS XML PARSER - DEVELOPED BY WADE, TIMOTHY J.")
print("This CLI application will create human readable CSV spreadsheets
from\n""XML files directly exported from the McAfee ePolicy Orchestrator.")
print("\nSupported products:\n")
for each_entry in hbss_parser.product_dict:
print(" " + each_entry)
print(" HOSTIPS_8000_FW")
print("\nThe following files will be checked against supported "
"XML file types:\n")
for each_file in os.listdir():
if each_file.endswith('.xml'):
xmlfiles.append(each_file)
print(each_file)
date_check = input("\nFor HIPS 8 FW Policies only, would you also like to create an additional \n.CSV file containing only new rules created/modified since a given date? \n(For all other policies, enter N): Y/N ")
if (date_check.lower().startswith('y')):
date_input = input("\nFile will only contain new rules created/modified since\n MM-DD-YYYY? (include hyphens when entering date value): ")
sincedate = True
else:
sincedate = False
begin_check = input("\nBegin parsing to CSV? Y/N ")
if (begin_check.lower().startswith('y')):
hbss_parser.currentDirXMLListBLDR()
hbss_parser.hbssObjectListBLDR()
hbss_parser.hbssObjParseToCSV()
dirfiles = os.listdir()
for xmlfile in xmlfiles:
if (xmlfile[:-4] + '_CSV.csv') in dirfiles:
pass
else:
try:
args = ['HIPS_8_FW_XML_Parser_Action.py', xmlfile]
HIPS_8_FW_XML_Parser_Action.main(args, True)
if sincedate:
args = ['HIPS_8_FW_XML_Parser_Action.py', xmlfile, date_input]
HIPS_8_FW_XML_Parser_Action.main(args, True)
except:
pass
else:
pass
1 ответ
Лучший способ найти правильный путь, который я могу придумать, - разбить работу командного файла на соответствующие компоненты. Это очень простой пакетный файл, который выполняет среду Python и говорит ему запустить определенный скрипт. Из рассмотрения сценария Python видно, что командный файл предназначен для запуска из папки, содержащей сценарий Python и один или несколько XML-файлов.
echo off
Отключение эха просто говорит Windows не выводить каждую команду в командном файле на экран. Это более чистый способ запуска пакетных файлов и присутствует практически во всех пакетных файлах. Это не обязательно с Powershell.
set winpy=C:\Users\AIODUDE.AIODUDE-PC\Downloads\WPy-3710\python-3.7.1.amd64\
Эта команда создает переменную с именем winpy
который равен пути, где находится ваш исполняемый файл Python.
if EXIST %winpy% (
Это начало оператора IF, который сначала проверяет, указан ли путь, указанный для winpy
на самом деле существует. Если это так, то он запускает код между двумя круглыми скобками.
"%winpy%python.exe" "%~dp0HBSS_XML_Parser_Driver_Action.py" )
Это линия, которая делает реальную работу. Начинается python.exe
исполняемый файл с параметром командной строки вашего текущего пути и именем скрипта.
%~dp0
расширяется до диска и пути, по которым вы запустили пакетный файл.
Поэтому, если вы назовете этот файл mybatch.bat
и поместите его в c:\test
тогда вот примеры команды, которую она выполняет:
Пример 1: если у вас открыто окно командной строки и вы находитесь в c:\users\yourname\downloads
папка и вы вводите c:\test\mybatch.bat
чтобы выполнить этот пакетный файл, пакетный файл запустит следующую команду:
"C:\Users\AIODUDE.AIODUDE-PC\Downloads\WPy-3710\python-3.7.1.amd64\python.exe" "c:\users\yourname\downloads\HBSS_XML_Parser_Driver_Action.py"
Пример 2. Если у вас открыто окно командной строки, и вы в данный момент находитесь в c:\test\
папка и вы вводите mybatch.bat
чтобы выполнить этот пакетный файл, пакетный файл запустит следующую команду:
"C:\Users\AIODUDE.AIODUDE-PC\Downloads\WPy-3710\python-3.7.1.amd64\python.exe" "c:\test\HBSS_XML_Parser_Driver_Action.py"
Эквивалентный скрипт Powershell v3 или более новый будет выглядеть так:
#Create the $winpy variable with the path to python.exe
$winpy = "C:\Users\AIODUDE.AIODUDE-PC\Downloads\WPy-3710\python-3.7.1.amd64\"
#Test if the $winpy path exists
if (test-path $winpy) {
#Execute python.exe and start the script named 'HBSS_XML_Parser_Driver_Action.py' located in the same directory the powershell script is run from
& "$($winpy)python.exe" "$PSScriptRoot\HBSS_XML_Parser_Driver_Action.py"
}