powershell - 在 PS1 脚本中调用脚本后引用文本

标签 powershell aws-cloudformation

我们以下面的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 进一步增强脚本的在线帮助.

除此之外,使用参数还有很多其他优点(尽管它们在您的场景中可能没有多大用处)。您可以进行参数验证、强制参数、定义默认值、从管道读取值、通过参数集使参数依赖于其他参数等等。请参阅herehere了解更多信息。

关于powershell - 在 PS1 脚本中调用脚本后引用文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34298843/

相关文章:

powershell - 如何在PowerShell中进行验证过程?

parsing - 为什么 PowerShell 将 `$true -or $false` 解析为 `CommandElement`?

windows - 用于将每个第 n 个文件从 folder1 复制到 folder2 的批处理文件?

amazon-web-services - Cloudformation : access other resources in the stack folder, 文件夹在哪里?

amazon-web-services - 如何修复处于不兼容网络状态的 Amazon RDS 数据库

aws-cloudformation - 如何在cloudformation中转义$符号

amazon-web-services - 服务无法承担角色错误 - 使用 JDBC 目标创建 AWS Glue cloudformation

powershell - 解析大型文本文件最终导致内存和性能问题

regex - 如何使用Powershell正则表达式从事件日志消息中获取数字?

amazon-dynamodb - CloudFormation dynamo 数据库部署中不支持的属性 'AttributeType'