Присвоение переменной не работает с параметром переключателя - PullRequest
1 голос
/ 26 февраля 2020

Я делаю что-то, что мне кажется довольно базовым c, но работает не так, как ожидалось.

Если скрипт запускается с ключом -WhatIf, тогда $ liveTest должен иметь значение «Test». Если скрипт запускается с ключом -Live, то $ liveTest должен быть «Live».

Однако оба переключателя заставляют $ liveTest быть «Test»

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}
}

enter image description here

1 Ответ

1 голос
/ 26 февраля 2020

В ваших if и elseif условиях используется оператор присваивания = вместо оператора сравнения -eq. В результате $liveTest устанавливается на Test при каждом запуске. Обновите ваш код следующим образом:

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

Поскольку вы используете if и elseif условия для назначения переменных, $liveTest = "Test" всегда происходит, а $liveTest = "Live" никогда не происходит.

См. About_Comparison_Operators для получения дополнительной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...