我们以下面的PowerShell声明为例:
powershell.exe c:\temp\windowsbroker.ps1 IIS
是否可以在windowsbroker.ps1
内编写脚本以检查该IIS字符串,以及是否存在以执行特定的安装脚本?代理脚本用于安装不同的应用程序,具体取决于调用它时跟随它的字符串。
这似乎是一个奇怪的问题,但我一直在使用CloudFormation来启动应用程序环境,我正在指定一个“ApplicationStack”参数,该参数将在运行powershell脚本时被引用,因此它知道哪个在启动期间运行以安装正确应用程序的脚本。
答案 0 :(得分:3)
您尝试做的事情称为参数或参数处理。在最简单的形式中,PowerShell为automatic variable $args
中的脚本提供了所有参数。这将允许您检查参数IIS
,如下所示:
if ($args -contains 'iis') {
# do something
}
或者像这样,如果你想让支票区分大小写(我不建议这样做,因为Windows和PowerShell通常都不是):
if ($args -ccontains 'IIS') {
# do something
}
但是,由于显然您希望将参数用作触发器来触发脚本的特定行为,因此有更好,更复杂的方法来执行此操作。您可以在脚本顶部添加Param()
部分,并检查参数是否存在于此类参数中(有关要安装的事项列表):
Param(
[Parameter()]
[string[]]$Install
)
$Install | ForEach-Object {
switch ($_) {
'IIS' {
# do something
}
...
}
}
或像这样(对于单个选项):
Param(
[switch]$IIS
)
if ($IIS.IsPresent) {
# do something
}
您可以像这样运行脚本:
powershell "c:\temp\windowsbroker.ps1" -Install "IIS",...
或者分别喜欢这样:
powershell "c:\temp\windowsbroker.ps1" -IIS
通常我更喜欢使用数组参数切换参数(除非你有一个相当广泛的选项列表),因为后者你必须担心数组元素的拼写,而使用开关你需要构建 - 拼写检查。
使用Param()
部分还会自动为您的脚本添加简短的使用说明:
PS C:\temp> Get-Help windowsbroker.ps1
windowsbroker.ps1 [-IIS]
您可以通过comment-based help进一步增强对此脚本的在线帮助。
使用参数还有很多其他优点(即使它们在你的场景中可能没有那么多用)。您可以执行参数验证,强制参数,定义默认值,从管道读取值,通过参数集使参数依赖于其他参数,等等。有关详细信息,请参阅here和here。
答案 1 :(得分:0)
是的,它们被称为位置参数。您可以在脚本开头提供参数:
Param(
[string]$appToInstall
)
然后您可以按如下方式编写脚本:
switch ($appToInstall){
"IIS" {"Install IIS here"}
}