You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从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,提问作者Евгений

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 12:06:44