gpt4 book ai didi

powershell - PowerShell boolean 值-如何以不同于false的方式处理null?

转载 作者:行者123 更新时间:2023-12-02 23:09:35 25 4
gpt4 key购买 nike

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

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传递给目标,我想知道这是否会影响这些 bool(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 - PowerShell boolean 值-如何以不同于false的方式处理null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46223726/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com