1

我正在做一些对我来说似乎很基本但没有按预期工作的事情。

如果脚本使用 -WhatIf 开关运行,则 $liveTest 应该是“Test”。如果脚本使用 -Live 开关运行,则 $liveTest 应该是“Live”。

然而,这两个开关都导致 $liveTest 成为“测试”

param (
    [CmdletBinding()]
    [Parameter(Mandatory = $true, ParameterSetName = 'UsersOnlyLive')]
    [Parameter(Mandatory = $true, ParameterSetName = 'UsersOnlyTest')]
    [Switch]
    $users,

    [Parameter(Mandatory = $true, ParameterSetName = 'ComputersOnlyLive')]
    [Parameter(Mandatory = $true, ParameterSetName = 'ComputersOnlyTest')]
    [Switch]
    $computers,

    [Parameter(Mandatory = $true, ParameterSetName = 'AllLive')]
    [Parameter(Mandatory = $true, ParameterSetName = 'AllTest')]
    [Switch]
    $all,

    [Parameter(Mandatory=$true)]
    [string]
    $days,

    [switch]
    $console,

    [Parameter(Mandatory = $true, ParameterSetName = 'AllTest')]
    [Parameter(Mandatory = $true, ParameterSetName = 'UsersOnlyTest')]
    [Parameter(Mandatory = $true, ParameterSetName = 'ComputersOnlyTest')]
    [switch]
    $WhatIf,

    [Parameter(Mandatory = $true, ParameterSetName = 'AllLive')]
    [Parameter(Mandatory = $true, ParameterSetName = 'UsersOnlyLive')]
    [Parameter(Mandatory = $true, ParameterSetName = 'ComputersOnlyLive')]
    [switch]
    $live
)
Process {

    # If -WhatIf or -Live switch is passed, creates a hashtable for the -WhatIf parameter.
    If($WhatIf) { 
        $whatIf = @{ WhatIf = $true }
        $liveTest = "Test"
    }
    ElseIf($live) { 
        $whatIf = @{ WhatIf = $false }
        $liveTest = "Live"
    }
    If($liveTest = "Test"){Write-Output $liveTest}
    elseif($liveTest = "Live"){Write-Output $liveTest}
}

在此处输入图像描述

4

1 回答 1

1

您的ifandelseif条件使用的是赋值运算符=而不是比较运算符-eq。结果,每次运行$liveTest都设置为Test。将您的代码更新为以下内容:

if ($liveTest -eq "Test") {
    Write-Output $liveTest
}
elseif ($liveTest -eq "Live") {
    Write-Output $liveTest
}

由于您使用ifandelseif条件来进行变量赋值,$liveTest = "Test"因此总是会发生并且$liveTest = "Live"永远不会发生。

有关详细信息,请参阅About_Comparison_Operators

于 2020-02-26T17:33:32.703 回答