将参数从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