PowerShell boolean 值——如何以不同的方式处理 null 和 false?

标签 powershell boolean

我正在尝试编写一个服务器构建脚本,其中包含各种任务的 boolean 参数,例如是否安装IIS。如果用户没有以某种方式指定此参数,我希望脚本提示做出决定,但为了方便和无人值守执行,我希望用户能够通过设置来明确选择安装 IIS 或不安装 IIS在命令行上将值设置为 True 或 False,从而避免出现提示。我的问题是,当我创建 boolean 参数时,如果未在命令行上指定,PowerShell 会自动将其设置为 False,而不是将其保留为空。这是我认为可行的设计:

param(
    [bool]$IIS
)

if ($IIS -eq $null) {
    $InstallIIS = Read-Host "Do you want to install IIS? (Y/N)"
    if ($InstallIIS -eq "Y") {$IIS = $true}
}

if ($IIS) {Do stuff here}

任何有关如何实现我期望的结果的建议将不胜感激。然后,如果这改变了任何事情,我真正想做的是利用 PSRemoting 接受用户系统主机上的这些构建决策参数,然后将它们作为 ArgumentList 传递给目标,我想知道这是否会影响这些处理 boolean 值。例如:

param (
    [string[]]$Computers
    [bool]$IIS
)

$Computers | Foreach-Object {
    Invoke-Command -ComputerName $_ -ArgumentList $IIS -ScriptBlock {
        param(
            [bool]$IIS
        )

        if ($IIS -eq $null) {
            $InstallIIS = Read-Host "Do you want to install IIS? (Y/N)"
            if ($InstallIIS -eq "Y") {$IIS = $true}
        }
        if ($IIS) {Do stuff here}

想法?

最佳答案

实现这一点的方法是使用参数集:

[CmdletBinding()]
param (
    [Parameter()]
    [string[]]$Computers ,

    [Parameter(ParameterSetName = 'DoSomethingWithIIS', Mandatory = $true)]
    [bool]$IIS
)

$Computers | Foreach-Object {
    Invoke-Command -ArgumentList $IIS -ScriptBlock {
        param(
            [bool]$IIS
        )

        if ($PSCmdlet.ParameterSetName -ne 'DoSomethingWithIIS') {
            $InstallIIS = Read-Host "Do you want to install IIS? (Y/N)"
            if ($InstallIIS -eq "Y") {$IIS = $true}
        }
        if ($IIS) {Do stuff here}

关于PowerShell boolean 值——如何以不同的方式处理 null 和 false?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46223726/

相关文章:

powershell - 如何使用PowerShell获取CRM流程?

powershell - 开启按位枚举

c++ - 为什么我在 C++ 中得到 "error: expected ' }'"但在 C 中却没有?

java - 我将如何将 boolean 字符串更改为 JTable 中的 JCheckBox?

java - 为什么这个数组到二维数组 boolean 值是真的?

windows - Powershell' 不是内部或外部命令,也不是可运行的程序 或批处理文件

powershell - 单个构建步骤的 TeamCity 构建日志

Powershell读取文本文件等到找到然后继续

boolean - 将 Variant 转换为 bool

c++ - 为什么在这种情况下 bool 和 not bool 都返回 true?