如何从Python中运行指定PowerShell脚本?
在Python中运行PowerShell脚本的实现方法
方法一:将PowerShell脚本嵌入Python代码中
直接把PowerShell脚本作为字符串传递给powershell.exe的-Command参数,处理好字符串转义和必要的变量定义即可:
import subprocess # 定义PowerShell脚本内容,用三重单引号避免双引号转义 ps_script = ''' # 定义俄语区域信息,避免原脚本变量未定义报错 $LocaleRU = New-Object System.Globalization.CultureInfo('ru-RU') $StartDate = (Get-Date).adddays(-1).tostring("dd/MM/yyyy",$LocaleRU) $Machine = "name" $Events = Get-WinEvent -FilterHashtable @{Logname = "ForwardedEvents"; ID = 4740; StartTime=$StartDate;} -ComputerName $Machine # -MaxEvents 5 foreach ($event in $Events) { [xml]$Xml = $event.ToXml() $login=$xml.Event.EventData.Data.'#text'[0] $hostName = $xml.Event.EventData.Data.'#text'[1] write-host "$login;$hostName" } ''' # 执行脚本并捕获输出 result = subprocess.run( ["powershell.exe", "-Command", ps_script], capture_output=True, encoding='utf-8' ) # 打印结果 print("执行输出:") print(result.stdout) if result.stderr: print("错误信息:") print(result.stderr)
关键说明:
- 使用
-Command参数告知PowerShell执行后续的脚本内容 - Python的三重单引号字符串可直接包含PowerShell里的双引号,无需额外转义
- 添加
$LocaleRU的定义代码,避免原脚本因变量未定义运行失败 - 通过
capture_output=True捕获脚本输出和错误信息,encoding='utf-8'保证多语言字符正常显示
方法二:将PowerShell脚本保存为文件后调用
如果脚本逻辑复杂,建议单独保存为.ps1文件,再通过Python调用:
import subprocess # 将脚本写入本地文件 with open("event_query.ps1", "w", encoding='utf-8') as script_file: script_content = ''' $LocaleRU = New-Object System.Globalization.CultureInfo('ru-RU') $StartDate = (Get-Date).adddays(-1).tostring("dd/MM/yyyy",$LocaleRU) $Machine = "name" $Events = Get-WinEvent -FilterHashtable @{Logname = "ForwardedEvents"; ID = 4740; StartTime=$StartDate;} -ComputerName $Machine # -MaxEvents 5 foreach ($event in $Events) { [xml]$Xml = $event.ToXml() $login=$xml.Event.EventData.Data.'#text'[0] $hostName = $xml.Event.EventData.Data.'#text'[1] write-host "$login;$hostName" } ''' script_file.write(script_content) # 调用PowerShell执行脚本文件 result = subprocess.run( ["powershell.exe", "-File", "event_query.ps1"], capture_output=True, encoding='utf-8' ) # 输出结果 print("执行输出:") print(result.stdout) if result.stderr: print("错误信息:") print(result.stderr)
方法优势:
- 脚本文件可单独用PowerShell调试,排查问题更方便
- 适合逻辑复杂、需要频繁修改的PowerShell脚本
内容的提问来源于stack exchange,提问作者Евгений
相关产品推荐
相关产品推荐

