在PowerShell中将标志从一个脚本移动到另一个脚本

时间:2019-08-14 11:42:13

标签: powershell

我有2个Powershell脚本script1.ps1script2.ps1。它们都包含相同的参数标志和整数参数[int]$num, [switch]$silent = $false

现在,我使用参数script.ps1调用script.ps1 222 -silent。我想使用该标志和另一个整数参数从script2.ps1调用script1.ps1。但是我发现的唯一决定是

param([int]$num, [switch]$silent = $false)

if($silent) {
    .\script2.ps1 333 -silent 
} else {
    .\script2.ps1 333
}

是否有更简便的方法将参数标志从一个脚本发送到另一个脚本?

1 个答案:

答案 0 :(得分:2)

开关参数接受布尔值,因此您可以执行以下操作:

Param(
    [int]$num,
    [Switch]$silent = $false
)

.\script2.ps1 333 -silent:$silent.IsPresent

请注意,这并不完全像passthru。在这种情况下,第二个脚本将始终通过参数-silent传递,只是具有显式值$true或$ false。

如果您不希望在未调用第一个脚本时不传递参数,那么您实际上无法进行区分。在这种情况下,您需要这样的东西:

Param(
    [int]$num,
    [Switch]$silent = $false
)

$extraParams = @{}
if ($PSBoundParameters.ContainsKey('silent')) {
    $extraParams['silent'] = $silent.IsPresent
}

.\script2.ps1 333 @extraParams