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

在PowerShell中将标志从一个脚本移动到另一个脚本,powershell,Powershell,我有两个powershell脚本script1.ps1和script2.ps1。它们都包含相同的参数标志和整数参数[int]$num,[switch]$silent=$false 现在我使用参数script.ps1 222-silent调用script.ps1。我想使用该标志和另一个整数参数从script1.ps1调用script2.ps1。但我唯一的决定是 param([int]$num, [switch]$silent = $false) if($silent) { .\scrip

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

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

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

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

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

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

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

.\script2.ps1 333 -silent:$silent.IsPresent
Param(
    [int]$num,
    [Switch]$silent = $false
)

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

.\script2.ps1 333 @extraParams
请注意,这与passthru的行为并不完全相同。在这种情况下,第二个脚本将始终传递参数
-silent
,只是显式值为
$true
或`$false

如果您不想在第一个脚本未被调用时传递该参数,那么您就无法真正进行区分。在这种情况下,您需要以下内容:

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

.\script2.ps1 333 -silent:$silent.IsPresent
Param(
    [int]$num,
    [Switch]$silent = $false
)

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

.\script2.ps1 333 @extraParams

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

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

.\script2.ps1 333 -silent:$silent.IsPresent
Param(
    [int]$num,
    [Switch]$silent = $false
)

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

.\script2.ps1 333 @extraParams
请注意,这与passthru的行为并不完全相同。在这种情况下,第二个脚本将始终传递参数
-silent
,只是显式值为
$true
或`$false

如果您不想在第一个脚本未被调用时传递该参数,那么您就无法真正进行区分。在这种情况下,您需要以下内容:

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

.\script2.ps1 333 -silent:$silent.IsPresent
Param(
    [int]$num,
    [Switch]$silent = $false
)

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

.\script2.ps1 333 @extraParams