Konwertuj Batch na PowerShell Wywoływanie skryptów w języku Python

0

Mam skrypt Batch, który wywołuje Python, a następnie uruchamia program w języku Python.

Zamiast tego użyć skryptu Batch, chciałbym użyć PowerShell.

Nie jestem programistą ani scripteriem, a ja googlowałem i szukałem bez żadnego szczęścia, jak uzyskać poprawną składnię. Podczas testowania użyłem kilku komend: invoke-item, invoke-command, set- i get-variable oraz innych, o których zapomniałem itd.

Czy ktoś może podać poprawną składnię PowerShell, aby najpierw wywołać, plik wykonywalny Pythona, a następnie sam skrypt Python?

Skrócony skrypt Batch jest osadzony wraz ze skryptem Python, który działa tak, jak powinien.

Z góry dziękuję.

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" )

Nazwany skrypt 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
user714888
źródło
"Nie jestem programistą ani skryptyrem ..." musisz zostać jednym z nich, jeśli chcesz programować i pisać scenariusze. Wydaje się to dobrym początkiem. To jest naprawdę podstawowy plik wsadowy. Najpierw rozbij go i badaj, dopóki nie będziesz dokładnie wiedział, co robi. Następnie przejdź do badania, dopóki nie wymyślisz, jak skopiować to zachowanie w powłoce. Ktoś może przyjść i po prostu zbudować dla ciebie skrypt, ale zwykle zachęca się do badań i samokształcenia. To nie jest zadanie nie do pokonania. Właściwy skrypt Pythona nie jest tutaj odpowiedni.
Appleoddity
Konkretne pytania dotyczące tego, co dokładnie robi plik wsadowy, wykazanie własnych badań i zrozumienie go, byłyby o wiele bardziej skuteczne. Kolejne pytania dotyczące wykonywania określonych czynności w Powershell. To wszystko "nauczaj człowieka łowić". :)
Appleoddity
Skrypt wsadowy wywołuje plik wykonywalny Python, który wykonuje skrypt Python, który wyświetla opcje do analizy pliku XML do pliku CSV. Instrukcje zmienne są opcjonalne i są uwzględniane tylko w przypadku różnych instalacji w języku Python. Jak już wspomniano, wypróbowałem kilka różnych typów opcji PowerShell z minimalnym sukcesem. Jak już wspomniano, wypróbowałem kilka różnych typów opcji PowerShell z minimalnym sukcesem. Polecenie invoke-item wyświetla monit Python, aw osobnym oknie - aktualny skrypt w języku Python wyświetlający opcje, ale wynikowy plik CSV nie jest tworzony.
user714888
Próbowałem innych poleceń PowerShell (invoke-command, start-process) z różnym powodzeniem w wykonywaniu plików, ale żaden nie działał w różnych kombinacjach tworzenia pliku wyjściowego CSV. W rzeczywistości XML nie jest drukowany w nowszych skryptach testowych, zasadniczo plik (y) XML nie jest w kolejce do analizy. Uczę się, uczę się, czytam i oglądam materiały szkoleniowe, aby nauczyć się programu PowerShell, ale proszę o pomoc, aby móc teraz użyć go do pracy. Początkowo nie miałem zamiaru opublikować skryptu Python, ale zrobił to na wypadek gdyby ktoś chciał, ale chciałby go zobaczyć.
user714888
Dlatego zamiast używać skryptu wsadowego do efektywnego dostarczania GUI do przetwarzania plików w Pythonie, chcę, aby GUI używało PowerShell. Pytania szczegółowe: 1. Jakie są właściwe polecenia do utworzenia PowerShell'a, który wykonuje te same funkcje, co skrypt wsadowy? 2. W jaki sposób uzyskać XML do drukowania w GUI, aby był postrzegany jako plik do analizy? 3. Czy polecasz jakieś materiały szkoleniowe? Dziękuję Ci
user714888

Odpowiedzi:

0

Najlepszym sposobem na sprawienie, że podążę właściwą drogą, jest złamanie działania pliku wsadowego w odpowiednich komponentach. Jest to bardzo prosty plik wsadowy, który wykonuje środowisko Pythona i nakazuje mu uruchomienie określonego skryptu. Patrząc na skrypt Pythona, wydaje się, że plik wsadowy ma być uruchamiany z folderu zawierającego skrypt Pythona i jeden lub więcej plików .xml.

echo off

Echo off po prostu mówi systemowi Windows, aby nie wyświetlał każdego polecenia w pliku wsadowym na ekranie. Jest to czystszy sposób na uruchamianie plików wsadowych i jest obecny w prawie wszystkich plikach wsadowych. Nie jest to konieczne w Powershell.

set winpy=C:\Users\AIODUDE.AIODUDE-PC\Downloads\WPy-3710\python-3.7.1.amd64\

To polecenie tworzy zmienną o nazwie winpy który jest równy ścieżce, w której znajduje się twój plik wykonywalny Pythona.

if EXIST %winpy% (

Jest to początek instrukcji JEŻELI, która najpierw sprawdza, czy ścieżka została podana winpy faktycznie istnieje. Jeśli tak, to uruchamia kod między dwoma nawiasami.

"%winpy%python.exe" "%~dp0HBSS_XML_Parser_Driver_Action.py" )

To jest linia, która wykonuje rzeczywistą pracę. Zaczyna się python.exe plik wykonywalny z parametrem wiersza poleceń bieżącej ścieżki i nazwą skryptu.

%~dp0 rozwija się na dysk i ścieżkę, na której uruchomiłeś plik wsadowy.

Dlatego jeśli nazwiesz ten plik mybatch.bat i umieść go c:\test to są przykłady polecenia, które uruchamia:

Przykład 1: Jeśli masz otwarte okno wiersza polecenia i aktualnie znajdujesz się w c:\users\yourname\downloads folder i wpisujesz c:\test\mybatch.bat Aby wykonać ten plik wsadowy, plik wsadowy uruchomi następujące polecenie:

"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"

Przykład 2: Jeśli masz otwarte okno wiersza polecenia i aktualnie znajdujesz się w c:\test\ folder i wpisujesz mybatch.bat Aby wykonać ten plik wsadowy, plik wsadowy uruchomi następujące polecenie:

"C:\Users\AIODUDE.AIODUDE-PC\Downloads\WPy-3710\python-3.7.1.amd64\python.exe" "c:\test\HBSS_XML_Parser_Driver_Action.py"

Odpowiednik Powershell v3 lub nowszy skrypt wyglądałby tak:

#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"
}
Appleoddity
źródło
Cześć Appleoddity,
user714888
Cześć Appleoddity. Dzięki za skrypt. Jednak z jakiegoś dziwnego powodu plik XML nadal nie jest drukowany i przetwarzany podobnie do tego samego problemu, który miałem podczas testów. Plik XML znajduje się w tym samym folderze lokacji co skrypt, ale wciąż nie jest czytany, aby wytworzyć plik wyjściowy.
user714888
Na przykładzie: Przykład 1 nie drukuje pliku XML. Przykład 2 działa poprzez wydrukowanie pliku XML.
user714888
Pozwolę sobie to wyjaśnić, używam przykładów wsadowych, a nie PowerShella.
user714888
Strzelaj do Appleoddity, jestem ci winien przepyszne przeprosiny i piwo !! Działa idealnie.
user714888