首页 > 解决方案 > 为什么 AllowNull() 什么都不做?

问题描述

我有以下命令调用

& ".\script1.ps1" -switch1 "$DBN" "$($Server[-1])" "$Creds" "$ConnectionID" "$ConnectionDataSource"

我想让 ConnectionID 和 Connection DataSource 可选

我怎样才能做到这一点?

此命令仅在我为 ConnectionID 和 Connection Data Source 输入内容时才有效。否则,如果我不为这两个参数输入任何内容,它们将不起作用!

这是此 script1.ps1 中的参数(我在 script2.ps1 中调用):

Param(
    [Parameter(Mandatory=$true)]
    [string]$DBN,

    [Parameter(Mandatory=$true)]
    [string]$Server,

    [Parameter(Mandatory=$false)]
    [string]$Creds,

    [Parameter(Mandatory=$false, HelpMessage="Enter a UserID for the connection")]
    [string]$ConnectionID, 

    [Parameter(Mandatory=$false, HelpMessage="Enter a Data Source for the connection. Must enter the ConnectionID first")]
    [string]$ConnectionDataSource
)

这是其中的参数script2.ps1(我script1.ps1从中调用):

Param(
    [Parameter(Mandatory=$true)]
    [string]$DBN,

    [Parameter(Mandatory=$false, HelpMessage="Enter a UserID for the connection")]
    [string]$ConnectionID, 

    [Parameter(Mandatory=$false, HelpMessage="Enter a Data Source for the connection. Must enter the ConnectionID first")]
    [string]$ConnectionDataSource
)

script1.ps1在没有这两个输入的情况下运行就可以了。

我这样运行它:

PS> script1.ps1 DB1 Server1

所以我知道我必须在我调用 script1 的第二个脚本的调用运算符中做一些事情

我正在寻找这样的东西:

& ".\script1.ps1" -switch1 "$DBN" "$($Server[-1])" "$Creds" [optional]"$ConnectionID" [optional]"$ConnectionDataSource"

我尝试了[AllowNull()]script1 和 2 中的属性

[Parameter(Mandatory=$false, HelpMessage="Enter a UserID for the connection")]
[AllowNull()]
[string]$ConnectionID, 

[Parameter(Mandatory=$false, HelpMessage="Enter a Data Source for the connection. Must enter the ConnectionID first")]
[AllowNull()]
[string]$ConnectionDataSource

但它仍然会导致 script2 出错:

script1.ps1:无法将参数绑定到参数“ConnectionDataSource”,因为它是一个空字符串。

标签: powershellparameter-passing

解决方案


推荐阅读