2

我有一个具有如下功能的 powershell 脚本:

function RunOtherScript($_oneParameter, $twoParameter)
{
    ExecuteSSHCommand ("python -u otherScript.py " +
                       "--oneParameter $_oneParameter " +
                       "--twoParameter $twoParameter ")
}

参数“twoParameter”是可选的。我的问题是如何根据 $twoParameter 是否为空来动态添加字符串“--twoParameter $twoParameter”

4

3 回答 3

3

我会这样做:

function RunOtherScript($_oneParameter, $twoParameter) {
  $cmd = "python -u otherScript.py --oneParameter $_oneParameter"
  if ($twoParameter -ne $null) { $cmd += " --twoParameter $twoParameter" }
  ExecuteSSHCommand $cmd
}
于 2013-09-18T19:34:13.780 回答
0

哈哈,这不是一个简单的方法:

function RunOtherScript($_oneParameter, $twoParameter)
{
    if($twoParameter -ne $null){
        ExecuteSSHCommand ("python -u otherScript.py " +
                           "--oneParameter $_oneParameter " +
                           "--twoParameter $twoParameter ")
    }

    else
        ExecuteSSHCommand ("python -u otherScript.py " +
                           "--oneParameter $_oneParameter ")
}
于 2013-09-18T19:25:32.117 回答
0

注意:@AnsgarWiechers 的答案是推荐的答案。

IE

function RunOtherScript($_oneParameter, $twoParameter) {
    $cmd = "python -u otherScript.py --oneParameter $_oneParameter"
    if ($twoParameter) { $cmd += " --twoParameter $twoParameter" }
    ExecuteSSHCommand $cmd
}

以下内容纯粹出于学术兴趣而发布。


这是一个解决方案;但它只适用于数字/只是为了兴趣而不是一个好的或推荐的解决方案:

(我在下面以不同的方式对待oneParameter和处理twoParameter;如果oneParameter不存在,python 的调用仍然指定它(只是没有传递任何值);如果twoParameter该参数未在 python 调用中显示,但缺少该参数)。

cls
function RunOtherScript($_oneParameter, $twoParameter)
{
    ("python -u otherScript.py --oneParameter {0} {1:--twoParameter 0}" -f $_oneParameter, $twoParameter)
}

RunOtherScript
RunOtherScript "a"  
RunOtherScript "a" 10
RunOtherScript "a" "10" # this doesn't work the way you'd want it to

输出

python -u otherScript.py --oneParameter  
python -u otherScript.py --oneParameter a 
python -u otherScript.py --oneParameter a --twoParameter 10
python -u otherScript.py --oneParameter a 10

另一种选择:

这不是一个黑客,但需要更多代码;所以可能只有当你有很多参数时才值得:

clear-host
function RunOtherScript{
 [CmdletBinding()]
    Param(
        [parameter(Mandatory = $true)]
        [string]$_oneParameter
        ,
        [parameter(ValueFromRemainingArguments = $true)]
        [String] $args
    )
    process {
        [string]$cmd = "python -u otherScript.py"
        $cmd = $cmd + " --oneParameter $_oneParameter"
        $args | ?{$_ -ne ""} | %{ $cmd = $cmd + " --twoParameter $_" }
        write-output $cmd #to show what we'd be executing
        #ExecuteSSHCommand $cmd
    }
}
RunOtherScript "one" "two" "three"
RunOtherScript "one" "two" 
RunOtherScript "one"

输出:

python -u otherScript.py --oneParameter one --twoParameter two three
python -u otherScript.py --oneParameter one --twoParameter two
python -u otherScript.py --oneParameter one

或对于许多参数:

clear-host
function RunOtherScript{
 [CmdletBinding()]
    Param(
        [parameter(Mandatory = $true)]
        [string]$_oneParameter
        ,
        [parameter(ValueFromRemainingArguments = $true)]
        [string[]]$arguments
    )
    begin {
        [string[]]$optionalParams = 'twoParameter','threeParameter','fourParameter'
    }
    process {
        [string]$cmd = "python -u otherScript.py"
        $cmd = $cmd + " --oneParameter $_oneParameter"
        [int]$i = -1
        $arguments | ?{($_) -and (++$i -lt $optionalParams.Count)} | %{ $cmd = $cmd + " --" + $optionalParams[$i] + " " + $arguments[$i] }
        write-output $cmd 
        #ExecuteSSHCommand $cmd
    }
}
RunOtherScript "one" "two" "three" "four" "five"
RunOtherScript "one" "two" "three" "four"
RunOtherScript "one" "two" "three"
RunOtherScript "one" "two" 
RunOtherScript "one"

输出:

python -u otherScript.py --oneParameter one --twoParameter two --threeParameter three --fourParameter four
python -u otherScript.py --oneParameter one --twoParameter two --threeParameter three --fourParameter four
python -u otherScript.py --oneParameter one --twoParameter two --threeParameter three
python -u otherScript.py --oneParameter one --twoParameter two
python -u otherScript.py --oneParameter one
于 2015-08-13T16:42:00.547 回答