首页 > 解决方案 > 使用 .exe 和 powershell 执行批处理脚本

问题描述

感谢 Windows 环境中的任务调度程序,我想执行一个脚本。该脚本有两部分,一部分是 PowerShell 脚本命令,另一部分是启动 program.exe 命令。

我希望它们在同一个脚本中并一个接一个地启动它们,如果脚本失败,则会显示错误消息。我有一个这样的脚本:

@echo off
cd "C:\App\Extract_Spool\" & Start program.exe
PowerShell -NoProfile -ExecutionPolicy Bypass -File ""C:\App\Script\Script_Extraction\script.ps1"" -Verb RunAs
pause

当我执行所有脚本时,它似乎不起作用。但是,当我独立启动 exe 程序或 PowerShell 时,它可以工作。

你知道为什么吗 ?你能帮我么 ?

谢谢 !

标签: powershellbatch-fileexe

解决方案


由于您尝试运行提升权限的 PowerShell 脚本(以管理员身份),因此必须-Verb RunAsPowerShell 进程中调用Start-Processcmdlet ,这意味着您必须使用( ) 而不是CLI参数:-Command-c-File

powershell -NoProfile -ExecutionPolicy Bypass -Command "Start-Process -Verb RunAs powershell '-NoProfile', '-ExecutionPolicy Bypass', '-File', C:\App\Script\Script_Extraction\script.ps1"

笔记:

  • 需要另一个 powershell.exe过程来调用具有高度的脚本。

  • Windows PowerShell(PowerShell 版本高达 v5.1)中,提升会话的工作目录将是C:\Windows\System32;在 PowerShell [Core] v6+ 中,调用者的工作目录被继承。在这两个版本中,您都可以使用-WorkingDirectory参数直接明确指定工作。

  • 两者program.exe和您提升的脚本都将在一个的控制台窗口中运行。


推荐阅读