簡體   English   中英

有沒有辦法告訴 PowerShell 5 忽略一段代碼?

[英]Is there a way to tell PowerShell 5 to ignore a piece of code?

我正在嘗試編寫一個 function,如果運行 PowerShell 5.1,它將運行 1 行代碼,如果代碼在 PowerShell 7 中運行,則運行另一行代碼。我遇到的問題是 PowerShell 5.1 甚至不會執行代碼,因為它不知道如何處理? 在三元運算符中。

它返回錯誤“意外的令牌'?' 在表達或陳述中”。

有沒有辦法告訴 PowerShell 5 忽略一段代碼?

這是一個例子:

Function MyTestFunction
{
    $Value = 5

    if ($PSVersionTable.PSVersion.Major -le 5)
    {
        if ($Value -eq 5) { "Value is 5" } else { "Value isn't 5" }
    }
    else
    {
        $Value -eq 7 ? "Value is 7" : "Value isn't 7"
    }
}

我可以通過將其轉換為字符串並使用 invoke-expression 或腳本塊來使其工作。 但這對我來說似乎很草率。 而且它會減慢執行速度。

$String = "'$Value -eq 7 ? '"Value is 7'" : '"Value isn't 7'""

Invoke-Expression -Command $String

& ([scriptblock]::Create($String))

我很確定沒有,但我希望在 PowerShell 5 中有一些我不知道的命令或設置可以讓我告訴 powershell 忽略代碼行

$Value -eq 7 ? "Value is 7" : "Value isn't 7"

當它在 5.1 中運行時,它會編譯並執行。

最好是不需要我轉義或轉換代碼的東西。

這是對您的問題的參考。 判斷powershell的版本

您可以在“PSVersionTable”中使用“PSVersion”object,其中“Major”是檢查版本和調用命令的屬性。 下面修改后的代碼可能與 if-else 語句類似,應該運行 Powershell 5.1 中的第一行代碼,下面版本 7 的代碼應該只在 Powershell 7 上運行。

Function MyTestFunction {
if ($PSVersionTable.PSVersion.Major -le 5) {
    if ($Value -eq 5) { "Value is 5" } else { "Value isn't 5" }
}
elseif ($PSVersionTable.PSVersion.Major -eq 7) {
    if ($Value -eq 7) { "Value is 7" } else { "Value isn't 7" }
}
}

由於三元運算符 '? :' 在 Powershell 之前不可用 7 if 語句可以重寫為

if ($Value -eq 7) { "Value is 7" } else { "Value isn't 7" }

這應該在 5.1 和 7 版本上運行。

我的建議是使用switch

function FunctionName {

switch ($PSVersionTable.PSVersion.Major -le 5) {
    false { Write-Output "PowerShell Versions is 7 "  }
    Default { Write-Output "PowerShell Versions is 5 "}
}
    # verify output
$PSVersionTable.PSVersion.ToString()
}

windows powershell output 上

PS> FunctionName
PowerShell Versions is 5
5.1.22621.963

VS-Code with pwsh 7


PS> FunctionName
PowerShell Versions is 7 
7.3.1

有關開關的更多信息

關於_switch

希望這能有所幫助。 我發現 switch 語句更容易理解。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM