【问题标题】:PowerShell from a batch file using relative path使用相对路径的批处理文件中的 PowerShell
【发布时间】:2020-06-28 18:49:04
【问题描述】:

我有一个批处理文件,它以提升的权限启动 PowerShell 脚本并绕过执行策略:

PowerShell -NoProfile -ExecutionPolicy Unrestricted -Command "& {Start-Process PowerShell -ArgumentList '-NoProfile -ExecutionPolicy Unrestricted -File ""C:\Users\Bob\Desktop\New folder\Server.ps1""' -Verb RunAs}";

这行得通 是的!我希望能够对文件路径使用相对路径。

PowerShell -NoProfile -ExecutionPolicy Unrestricted -Command "& {Start-Process PowerShell -ArgumentList '-NoProfile -ExecutionPolicy Unrestricted -File "".\Server.ps1""' -Verb RunAs}";

由于某种原因失败了。 我究竟做错了什么?

【问题讨论】:

  • 您提升的批处理文件具有不同的工作文件夹(因此相对路径指向其他地方)。在 Powershell 命令前添加cd /d "%~dp0 以更改到正确的文件夹。
  • 在您的 bat 文件中只需执行 pushd C:\folder 然后在 powershell 命令之后执行 popd
  • 我一定是误会了。我不断收到系统找不到指定的路径。

标签: powershell batch-file relative-path


【解决方案1】:

如果您的 PowerShell 脚本不在 cmd 指向的位置,您将在该目录中搜索相对路径时收到错误消息。如果 PS 脚本存在于批处理脚本的同一位置,您可以从批处理中调用 PS 脚本,如下所示:

Powershell "%~dp0Server.ps1"

如果 PowerShell 和批处理脚本位置不同,首先需要在调用 PowerShell 脚本之前更改批处理中的目录,如下所示:

cd /d "C:\Users\Bob\Desktop\New Folder\"
Powershell -NoProfile .\Server.ps1

【讨论】:

  • 您应该引用路径,因为它们可能包含空格,并且您应该将/D 选项添加到cd...
  • 是的,我同意您的 cmets,但这取决于要求。无论如何,添加这些是为未来做好准备的额外附加组件
  • 感谢大家的帮助 - 现在说得通了。
【解决方案2】:
PowerShell -NoProfile -ExecutionPolicy Unrestricted -Command "& {Start-Process PowerShell -ArgumentList '-NoProfile -ExecutionPolicy Unrestricted -Command "Set-Location \"%~dp0\"; \".\Server.ps1\"' -Verb RunAs}"

-Verb RunAs 强制新的 Powershell 进程将目录更改为系统目录。您可以使用set-location 将其更改为使用%~dp0 的批处理文件脚本目录。

当使用-Verb RunAs 时,参数-WorkingDirectory 似乎被忽略,因此对于此任务似乎已过时。

您可以查看此示例以查看当前目录或更改目录之前的 Powershell 进程对新提升的 Powershell 进程没有影响:

cd /d "%~dp0"
PowerShell -NoProfile -ExecutionPolicy Unrestricted -Command "& {Start-Process PowerShell -ArgumentList '-NoProfile -ExecutionPolicy Unrestricted -Command \"Get-Location; Start-Sleep 10\"' -Verb RunAs}"

哪个输出:

Path
----
C:\Windows\system32

因此您可能需要在提升的 Powershell 进程中更改目录。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-30
    • 2014-01-15
    • 2011-05-18
    • 1970-01-01
    • 2014-08-03
    • 1970-01-01
    相关资源
    最近更新 更多