将参数从batch file传递到powershell脚本

在我的batch file中,我像这样调用powershell脚本:

powershell.exe "& "G:\Karan\PowerShell_Scripts\START_DEV.ps1" 

现在,我想传递一个string参数给START_DEV.ps1 。 假设参数是w=Dev

我怎样才能做到这一点?

 powershell -command "G:\Karan\PowerShell_Scripts\START_DEV.ps1 Dev" 

并在脚本头内:

 $w=$args[0] 

这个如果你想使用内置的variables$args 。 除此以外:

  powershell -command "G:\Karan\PowerShell_Scripts\START_DEV.ps1 -w \"Dev\"" 

并在脚本头内:

 param([string]$w) 

这如果你想要一个命名参数。

您可能也有兴趣返回错误级别:

 powershell -command "G:\Karan\PowerShell_Scripts\START_DEV.ps1 Dev; exit $LASTEXITCODE" 

错误级别将在batch file中以%errorlevel%

假设你的脚本类似于下面的代码片段,并命名为testargs.ps1

 param ([string]$w) Write-Output $w 

你可以在命令行调用这个:

 PowerShell.Exe -File C:\scripts\testargs.ps1 "Test String" 

这将在控制台上打印“Test String”(W / O引号)。 “testingstring”在脚本中变成$ w的值。

当一个脚本被加载时,任何传递的参数都会被自动加载到一个特殊的variables$args 。 你可以在脚本中引用它,而不必先声明它。

作为一个例子,创build一个名为test.ps1的文件,只需将variables$args test.ps1放在一行上即可。 像这样调用脚本,生成以下输出:

 PowerShell.exe -File test.ps1 abc "Easy as one, two, three" a b c Easy as one, two, three 

作为一般的build议,通过直接调用PowerShell来调用脚本时,我会build议使用-File选项,而不是隐式地使用&调用 – 它可以使命令行更清晰一些,特别是在需要处理嵌套引号时。

在ps1文件的顶部添加param declation

test.ps1

 param( # Our preferred encoding [parameter(Mandatory=$false)] [ValidateSet("UTF8","Unicode","UTF7","ASCII","UTF32","BigEndianUnicode")] [string]$Encoding = "UTF8" ) write ("Encoding : {0}" -f $Encoding) 

结果

 C:\temp> .\test.ps1 -Encoding ASCII Encoding : ASCII