簡體   English   中英

如果內聯PowerShell命令,如何運行

[英]How to run if inline on PowerShell command

假設我有這個功能;

Function SomeCommand{
    param(
        [string]$Var1,
        [string]$Var2
    )

    # Do Something
}

我可以像這樣設置它;

Function SomeCommand{
    param(
        [string]$Var1,
        [string]$Var2
    )

    if ($Var2){
        Do-SomeOtherCommand -SomeParam1 $Var1 -SomeParam2 $Var2
    } else {
        Do-SomeOtherCommand -SomeParam1 $Var1
}

如果我只有一個可選參數,這可以正常工作,但如果我有兩個可選參數,它會變得很難。 我想做這樣的事情;

Function SomeCommand{
    param(
        [string]$Var1,
        [string]$Var2,
        [string]$Var3
    )

    Do-SomeOtherCommand -SomeParam1 $Var1 (if($Var2){-SomeParam2 $Var2}) (if($Var3){-SomeParam3 $Var3})
}

有沒有辦法實現這個目標?

你可能正在尋找噴濺 您可以使用您希望傳遞的參數(及其值)構建哈希表,然后一次性指定整個事物:

function FuncB($param1, $param2)
{
   "FuncB -- param1:[$param1] param2:[$param2]"
}

function FuncA($paramA, $paramB)
{
   $args = @{}
   if ($paramA){ $args['param1'] = $paramA }
   if ($paramB){ $args['param2'] = $paramB }

   FuncB @args
}

測試

FuncA 'first' 'second'
FuncA 'OnlyFirst'
FuncA -paramB 'OnlySecond'

# results
# FuncB -- param1:[first] param2:[second]
# FuncB -- param1:[OnlyFirst] param2:[]
# FuncB -- param1:[] param2:[OnlySecond]

分號。 PowerShell允許您使用分號作為行終止符。

Write-Output 1;Write-Output 2;Write-Output 3;

就個人而言,我認為應該是強制性的。

另請注意,您可以將任意表達式構建為簡單字符串,然后使用Invoke-Expression (別名iex )來內聯調用它。

function FuncB($param1, $param2)
{
   "FuncB -- param1:[$param1] param2:[$param2]"
}

function FuncA($paramA, $paramB)
{
  $funcBCall = "FuncB $(if($paramA){ "-param1 '$paramA'" }) $(if($paramB){ "-param2 '$paramB'" })"
  iex $funcBCall
}

不過,這種方法非常簡陋和脆弱,所以我不推薦它。

暫無
暫無

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

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