我们以下面的PowerShell语句为例:
powershell.exe c:\temp\windowsbroker.ps1 IIS
是否可以在 windowsbroker.ps1
中编写脚本来检查该 IIS 字符串,以及它是否存在以执行特定的安装脚本?代理脚本旨在根据调用时跟随的字符串来安装不同的应用程序。
这似乎是一个奇怪的问题,但我一直在使用 CloudFormation 来启动应用程序环境,并且我指定了一个“ApplicationStack”参数,该参数将在 powershell 脚本运行时引用,以便它知道哪个在启动期间运行脚本以安装正确的应用程序。
最佳答案
您想要做的事情称为参数或参数处理。 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> <b>Get-Help windowsbroker.ps1</b>
windowsbroker.ps1 [-IIS]
您可以通过 comment-based help 进一步增强脚本的在线帮助.
除此之外,使用参数还有很多其他优点(尽管它们在您的场景中可能没有多大用处)。您可以进行参数验证、强制参数、定义默认值、从管道读取值、通过参数集使参数依赖于其他参数等等。请参阅here和 here了解更多信息。
关于powershell - 在 PS1 脚本中调用脚本后引用文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34298843/