Tôi muốn thực thi các lệnh bên dưới từ Python, nhưng tôi không nhận được bất kỳ đầu ra nào:
get-winevent -logname Microsoft-Windows-TerminalServices-LocalSessionManager/Operational -ComputerName $env:COMPUTERNAME | where {$_.Id -eq "21"}
Tôi đã tìm thấy một số giải pháp như dưới đây, nhưng chúng cũng không chạy thành công:
subprocess.Popen['powershell.exe [get-winevent -logname Microsoft-Windows-TerminalServices-LocalSessionManager/Operational -ComputerName $env:COMPUTERNAME] | where {$_.Id -eq "21"}']
Hỏi ngày 24 tháng 1 năm 2019 lúc 3:30Jan 24, 2019 at 3:30
1
Sử dụng thư viện subprocess
, có thể chạy các lệnh CMD trong Python. Để chạy các lệnh PowerShell, tất cả những gì bạn cần làm là thực thi C: \ Windows \ System32 \ PowerShell.exe và đi qua các đối số.
Đây là một số mã ví dụ để thử:
import subprocess
subprocess.call['C:\Windows\System32\powershell.exe Get-Process', shell=True]
Bạn có thể thay thế "Get-Process" bằng lệnh PowerShell bạn cần
Đã trả lời ngày 24 tháng 1 năm 2019 lúc 3:38Jan 24, 2019 at 3:38
6
Bỏ qua nội dung
Tôi có một thí nghiệm mà tôi đang làm việc và nghĩ rằng việc tận dụng Python sẽ rất vui. Là một phần của thí nghiệm đó, tôi sẽ cần thực hiện PowerShell từ Python vì chỉ có các cmdlet PowerShell mới có sẵn để làm những gì tôi cần. Sau một chút nghiên cứu một tuần để cho nó sôi, tôi đã có thể ngồi xuống đêm qua và giải quyết nó. Một phần của nó là sự không quen thuộc của tôi với Python cho những gì tôi đang làm, và phần khác chỉ là tôi không nghĩ về vấn đề này một cách toàn diện.
Những gì bạn cần
Bạn sẽ cần PowerShell được cài đặt trên hệ thống của bạn và Python 3.6+. Điều này sẽ làm việc đa nền tảng. Tôi đã thực hiện thử nghiệm của mình trên Kubuntu 20.10 Chạy PowerShell dưới dạng gói SNAP. Bạn sẽ không cần bất kỳ thư viện bên ngoài nào vì chúng tôi sử dụng một trong nhiều thư viện tuyệt vời gửi ra khỏi hộp với Python.
Mật mã
Tất cả những gì chúng ta cần là tạo một cuộc gọi tệp Ps.Py, và sau đó chúng ta có thể nhập mô -đun phụ.
Bây giờ chúng ta có thể tạo phương thức chạy mà chúng ta sẽ sử dụng để thực hiện lệnh PowerShell của mình.
def run[self, cmd]:
completed = subprocess.run[["powershell", "-Command", cmd], capture_output=True]
return completed
Hãy để thực hiện tệp Python của chúng tôi và sau đó tạo các lệnh mà chúng tôi muốn thực thi. Một lệnh có cú pháp chính xác và một lệnh có cú pháp xấu. Điều này sẽ chứng minh cách sử dụng return của phương thức phụ.
if __name__ == '__main__':
hello_command = "Write-Host 'Hello Wolrd!'"
hello_info = run[hello_command]
if hello_info.returncode != 0:
print["An error occured: %s", hello_info.stderr]
else:
print["Hello command executed successfully!"]
print["-------------------------"]
bad_syntax_command = "Write-Hst 'Incorrect syntax command!'"
bad_syntax_info = run[bad_syntax_command]
if bad_syntax_info.returncode != 0:
print["An error occured: %s", bad_syntax_info.stderr]
else:
print["Bad syntax command executed successfully!"]
Đây là tập tin hoàn chỉnh.
import subprocess
def run[self, cmd]:
completed = subprocess.run[["powershell", "-Command", cmd], capture_output=True]
return completed
if __name__ == '__main__':
hello_command = "Write-Host 'Hello Wolrd!'"
hello_info = run[hello_command]
if hello_info.returncode != 0:
print["An error occured: %s", hello_info.stderr]
else:
print["Hello command executed successfully!"]
print["-------------------------"]
bad_syntax_command = "Write-Hst 'Incorrect syntax command!'"
bad_syntax_info = run[bad_syntax_command]
if bad_syntax_info.returncode != 0:
print["An error occured: %s", bad_syntax_info.stderr]
else:
print["Bad syntax command executed successfully!"]
Thực hiện Ps.Py và chúng ta có thể thấy đầu ra. Lệnh đầu tiên đã không thành công và trả lại một mã thoát bằng 0 và chúng tôi in nó đã chạy thành công. Lệnh thứ hai có một lỗi đánh máy và chúng tôi nhận được mã thoát của một cái mà sau đó chúng tôi in lỗi xuất phát từ lỗi tiêu chuẩn.
$ python ps.py
Hello command executed successfully!
-------------------------
An error occurred: %s b"\x1b[91mWrite-Hst: \x1b[91mThe term 'Write-Hst' is not recognized as the name of a cmdlet, function, script file, or operable program.\nCheck the spelling of the name, or if a path was included, verify that the path is correct and try again.\x1b[0m\n"
Sự kết luận
Đó là nó, bây giờ bạn có thể cảm thấy thoải mái khi xây dựng bất kỳ loại lệnh nào mà bạn muốn được thực thi, thậm chí các lệnh đa dòng và nó sẽ hoạt động.
Cảm ơn vì đã đọc,
Jamie
Nếu bạn thích nội dung thì hãy xem xét mua cho tôi một ly cà phê.