Toplu İşi PowerShell Çağırma Python Komut Dosyalarına Dönüştür


0

Python'u çağıran daha sonra bir Python programını çalıştıran bir Toplu komut dosyası var.

Bunu yapmak için bir Batch komut dosyası kullanmak yerine, PowerShell kullanmak istiyorum.

Ben bir programcı ya da komut dosyası değilim ve Googled ve doğru sözdizimi nasıl elde edileceği konusunda herhangi bir şans olmadan araştırdım. Testte birkaç komut kullandım: invoke-item, invoke-command, set- ve get-değişken ve bazılarını unuttum, vb.

Birisi lütfen önce bana çağrılacak doğru PowerShell sözdizimini sağlayabilir, önce Python çalıştırılabilir, sonra Python betiğinin kendisi?

Kısaltılmış Batch betiği, olması gerektiği gibi çalışan Python betiği ile birlikte yerleştirilmiştir.

Şimdiden teşekkürler.

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

Denilen Python betiği

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

“Ben bir programcı ya da komut dosyası değilim ...” o zaman programlama ve komut dosyası yapmak istiyorsanız bir tane olmalısınız. Bu başlamak için iyi bir yer gibi görünüyor. Bu gerçekten basit bir toplu iş dosyasıdır. Öncelikle, onun ne yaptığını tam olarak bilene kadar araştırın ve araştırın. Sonra, bu davranışı powershell'de nasıl çoğaltacağınızı bulana kadar araştırın. Birileri gelip basitçe sizin için bir senaryo oluşturabilir, ancak araştırma ve kendi kendine öğrenme genellikle teşvik edilir. Bu aşılmaz bir iş değildir. Gerçek python betiği burada alakalı değil.
Appleoddity

Toplu iş dosyasının tam olarak ne yaptığı, kendi araştırmanızı ve anladığınızı gösteren özel sorular burada çok daha etkili olacaktır. Powershell'de belirli şeyler yapmakla ilgili daha fazla soru takip etti. Hepsi “balık tutmayı öğret” meselesi. :)
Appleoddity

Toplu iş komut dosyası, bir XML dosyasını bir CSV dosyasına ayrıştırma seçeneklerini gösteren Python komut dosyasını çalıştıran Python yürütülebilir dosyasını çağırır. Değişken ifadeleri isteğe bağlıdır ve yalnızca çeşitli Python kurulumları için dahil edilir. Belirtildiği gibi, minimum başarı ile birkaç farklı PowerShell seçeneği denedim. Belirtildiği gibi, minimum başarı ile birkaç farklı PowerShell seçeneği denedim. İnvoke-item komutu Python komut istemini sunar ve ayrı bir pencerede seçenekleri gösteren gerçek Python betiği ancak elde edilen CSV dosyası oluşturulmaz.
user714888

Diğer PowerShell komutlarını (invoke-command, start-process) dosyaları çalıştırmada farklı başarılarla denedim, ancak hiçbiri CSV çıktı dosyası oluştururken farklı kombinasyonlarda işe yaramadı. Gerçekte, XML yeni test komut dosyalarında yazdırılmıyor, temel olarak, XML dosyaları ayrıştırılmak üzere sıraya alınmıyor. Şimdi PowerShell'i öğrenmek için eğitim materyallerini okuyorum, öğreniyorum, okuyorum ve inceliyorum ancak şimdi yardım istemek için hemen çalışmam için kullanabiliyorum. Başlangıçta Python betiğini de göndermeyecektim, ancak birisinin onu görmek istemesi durumunda yaptım.
user714888

Böylece, Python dosyalarını işlemek için GUI'yi etkin bir şekilde sağlamak üzere toplu komut dosyasını kullanmak yerine, GUI'nin PowerShell'i kullanmasını istiyorum. Özel sorular: 1. Toplu komut dosyasıyla aynı işlevleri gerçekleştiren PowerShell'i oluşturmak için kullanılacak doğru komutlar nelerdir? 2. XML'in GUI'de yazdırılmasını ve böylece ayrıştırılacak dosya olarak görülmesini sağlarım? 3. Tavsiye ettiğiniz eğitim materyalleriniz var mı? Teşekkür ederim
user714888

Yanıtlar:


0

Sizi doğru yola sokmanın en iyi yolu, toplu iş dosyasının çalışmasını ilgili bileşenlerine bölmektir. Bu, python ortamını yürüten ve belirli bir komut dosyasını çalıştırmasını söyleyen çok düz bir toplu iş dosyasıdır. Python betiğine bakıldığında toplu iş dosyasının bir python betiği ve bir veya daha fazla .xml dosyası içeren bir klasörden çalıştırılması amaçlanmaktadır.

echo off

Echo off, Windows'a toplu iş dosyasındaki her bir komutu ekrana vermemesini söyler. Toplu iş dosyalarını çalıştırmak için daha temiz bir yoldur ve neredeyse tüm toplu iş dosyalarında bulunur. Powershell ile bu gerekli değildir.

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

Bu komut, winpypython çalıştırılabilir dosyanızın bulunduğu yola eşit olan bir değişken oluşturur .

if EXIST %winpy% (

Bu, önce belirttiğiniz yolun winpygerçekten var olup olmadığını kontrol eden bir IF ifadesinin başlangıcıdır . Varsa, iki parantez arasındaki kodu çalıştırır.

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

Asıl işi yapan çizgi budur. python.exeYürütülebilir dosyayı mevcut yolunuzun bir komut satırı parametresiyle ve komut dosyasının adıyla başlatır .

%~dp0 toplu iş dosyasını çalıştırdığınız sürücü ve yola doğru genişler.

Bu nedenle, bu dosyayı adlandırır mybatch.batve yerleştirirseniz c:\test, çalıştırmakta olduğu komutun örnekleri şunlardır:

Örnek 1: Açık bir komut istemi pencereniz varsa ve şu anda c:\users\yourname\downloadsklasörün içindeyseniz ve c:\test\mybatch.batbu toplu iş dosyasını yürütmek için girerseniz , toplu iş dosyası aşağıdaki komutu çalıştırır:

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

Örnek 2: Açık bir komut istemi pencereniz varsa ve şu anda c:\test\klasörün içindeyseniz ve mybatch.batbu toplu iş dosyasını yürütmek için girerseniz , toplu iş dosyası aşağıdaki komutu çalıştırır:

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

Eşdeğer bir Powershell v3 veya daha yeni bir komut dosyası şöyle görünür:

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

Merhaba Appleoddity,
user714888 23:18

Merhaba Appleoddity. Senaryo için teşekkürler. Ancak, garip bir nedenden ötürü, XML dosyası sınama sırasında alacağım aynı konuya benzer şekilde yazdırılmıyor ve ayrıştırılmıyor. XML dosyası, komut dosyasıyla aynı konum klasöründe ancak çıktı dosyasını oluşturmak için hala okunmuyor.
user714888

Örneğinizi kullanarak: Örnek 1, XML dosyasını yazdırmaz. Örnek 2, XML dosyasını yazdırarak çalışır.
user714888

Bunu açıklığa kavuşturmama izin verin, PowerShell'leri değil toplu örnekleri kullanıyorum.
user714888

Ateş Appleoddity, sana kocaman bir özür ve bir bira borcum var !! Mükemmel çalışıyor.
user714888
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.