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

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

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.