首页 > 解决方案 > 将参数从批处理传递到PowerShell

问题描述

我有一个批处理文件,我从中运行一个 powershell 脚本。我想将参数传递给这个 powershell 脚本。我尝试了很多不同的东西:

Set MachineName=Computer2
%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy ByPass -Command "%~dp0%\Rename.ps1" -MachineName %MachineName%

并用-File而不是-Command

Set MachineName=Computer2
%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy ByPass -File"%~dp0%\Rename.ps1" -MachineName %MachineName%

并且没有命名参数-MachineName

Set MachineName=Computer2
%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy ByPass -File"%~dp0%\Rename.ps1" %MachineName%

我的 Powershell 脚本 (Rename.ps1) 以:

Param($MachineName)

我尝试过使用双引号、单引号、不带引号、使用 -File 使用 -Command、使用命名参数(如-MachineName)且不使用命名参数,但每次都会出现此错误:

处理 - 文件“\10.193.40.56\c$\systems\cph_wsconfigtool\src\scripts\MachineName”失败,因为该文件没有“.ps1”扩展名。请指定一个有效的 Windows PowerShell 脚本文件名,然后重试。

但是,如果我删除参数,它会非常好。那么我做错了什么?我已经阅读了我在互联网上可以找到的所有关于它的帖子,他们都说这是这样做的方法。

标签: powershellbatch-file

解决方案


-Command "%~dp0\Rename.ps1"

代替

-Command "%~dp0%\Rename.ps1"

(答案来自对原始问题的评论。)


推荐阅读