在我的批处理文件中,我像这样调用PowerShell脚本:
powershell.exe "& "G:\Karan\PowerShell_Scripts\START_DEV.ps1"
现在,我想将字符串参数传递给START_DEV.ps1
。假设参数为w=Dev
。
我该怎么做?
答案 0 :(得分:131)
powershell -command "G:\Karan\PowerShell_Scripts\START_DEV.ps1 Dev"
并在你的脚本头内:
$w=$args[0]
如果您想使用内置变量$args
,请执行此操作。否则:
powershell -command "G:\Karan\PowerShell_Scripts\START_DEV.ps1 -Environment \"Dev\""
并在你的脚本头内:
param([string]$Environment)
这是你想要一个命名参数。
您可能还有兴趣返回错误级别:
powershell -command "G:\Karan\PowerShell_Scripts\START_DEV.ps1 Dev; exit $LASTEXITCODE"
错误级别将在批处理文件中以%errorlevel%
。
答案 1 :(得分:20)
假设您的脚本类似于以下代码段并命名为testargs.ps1
param ([string]$w)
Write-Output $w
您可以在命令行中将其称为:
PowerShell.Exe -File C:\scripts\testargs.ps1 "Test String"
这将在控制台上打印“测试字符串”(没有引号)。 “Test String”成为脚本中$ w的值。
答案 2 :(得分:10)
加载脚本时,传递的所有参数都会自动加载到特殊变量$args
中。您可以在脚本中引用它而不先声明它。
例如,创建一个名为test.ps1
的文件,只需将变量$args
放在一行上。像这样调用脚本会生成以下输出:
PowerShell.exe -File test.ps1 a b c "Easy as one, two, three"
a
b
c
Easy as one, two, three
作为一般建议,当通过直接调用PowerShell调用脚本时,我建议使用-File
选项,而不是使用&
隐式调用它 - 它可以使命令行更清洁,特别是如果你需要处理嵌套的引号。
答案 3 :(得分:5)
在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
答案 4 :(得分:4)
@Emiliano的回答非常好。您也可以像这样传递命名参数:
powershell.exe -Command 'G:\Karan\PowerShell_Scripts\START_DEV.ps1' -NamedParam1 "SomeDataA" -NamedParam2 "SomeData2"
请注意,参数不在命令调用范围内,您将使用:
[parameter(Mandatory=$false)]
[string]$NamedParam1,
[parameter(Mandatory=$false)]
[string]$NamedParam2