在 PS1 脚本中调用脚本后引用文本
Referencing text after script is called within PS1 Script
下面以PowerShell语句为例:
powershell.exe c:\temp\windowsbroker.ps1 IIS
是否可以在 windowsbroker.ps1
中编写脚本来检查 IIS 字符串,以及它是否存在以执行特定的安装脚本?代理脚本旨在根据调用它时跟随的字符串安装不同的应用程序。
这似乎是一个奇怪的问题,但我一直在使用 CloudFormation 启动应用程序环境,并且我指定了一个 "ApplicationStack" 参数,当 powershell 脚本是 运行 所以它知道哪个脚本 运行 在启动期间安装正确的应用程序。
是的,它们被称为位置参数。您在脚本开头提供参数:
Param(
[string]$appToInstall
)
然后您可以按如下方式编写脚本:
switch ($appToInstall){
"IIS" {"Install IIS here"}
}
您正在尝试做的是参数或参数处理。 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 and here。
下面以PowerShell语句为例:
powershell.exe c:\temp\windowsbroker.ps1 IIS
是否可以在 windowsbroker.ps1
中编写脚本来检查 IIS 字符串,以及它是否存在以执行特定的安装脚本?代理脚本旨在根据调用它时跟随的字符串安装不同的应用程序。
这似乎是一个奇怪的问题,但我一直在使用 CloudFormation 启动应用程序环境,并且我指定了一个 "ApplicationStack" 参数,当 powershell 脚本是 运行 所以它知道哪个脚本 运行 在启动期间安装正确的应用程序。
是的,它们被称为位置参数。您在脚本开头提供参数:
Param(
[string]$appToInstall
)
然后您可以按如下方式编写脚本:
switch ($appToInstall){
"IIS" {"Install IIS here"}
}
您正在尝试做的是参数或参数处理。 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 and here。