如何在批处理文件中运行指定PowerShell脚本?
批处理内嵌PowerShell脚本实现单文件执行方案
要把你的PowerShell脚本嵌入批处理单文件执行,不能逐行加powershell前缀(会导致每个命令在独立进程执行,上下文丢失),正确做法是把整个PowerShell脚本作为一个整体传递给powershell.exe,以下是可行的批处理代码:
@echo off powershell -ExecutionPolicy Bypass -Command ^ "ipconfig /all | clip; ^ $ol = New-Object -ComObject Outlook.Application; ^ $mail = $ol.CreateItem(0); ^ $mail.To = 'your-recipient@example.com'; ^ $mail.Subject = 'My Ip'; ^ $ip = Get-Clipboard; ^ $mail.HtmlBody = '<h1>' + $ip + '</h1>'; ^ $mail.Display(); ^ $mail.Send()" pause
关键说明:
@echo off:关闭批处理命令的默认输出,让执行过程更干净;末尾的pause可以防止执行完成后窗口直接关闭,方便查看结果。powershell -ExecutionPolicy Bypass:临时绕过PowerShell执行策略限制,确保脚本能正常运行(无需修改系统全局执行策略)。^:批处理中的换行转义符,用来拆分长命令,保持脚本的可读性,所有PowerShell命令被包裹在同一个双引号块中,确保在同一个PowerShell进程内执行,变量和对象上下文不会丢失。- 把PowerShell中的双引号替换为单引号(如
'your-recipient@example.com'),避免和批处理外层的双引号冲突,也可以将双引号转义为"",效果一致。
注意事项:
- 替换
your-recipient@example.com为实际的收件人邮箱地址。 - 确保系统已安装Outlook,且当前用户有Outlook的邮件发送权限。
内容的提问来源于stack exchange,提问作者Redacted
相关产品推荐
相关产品推荐

