gpt4 book ai didi

powershell - 我如何允许 powershell 接受命名参数的空字符串?

转载 作者:行者123 更新时间:2023-12-03 00:23:08 24 4
gpt4 key购买 nike

我正在调用 powershell 脚本:

powershell.exe -file basic.ps1 -User ""

我还有其他参数,这有点淡化了。

PS 脚本接受 params :
[CmdLetBinding()]
param(
[Parameter(Mandatory=$true)]
[AllowEmptyString()]
[string]$User = 't'
)

当我运行命令时,我得到:

Missing an argument for parameter 'User'. Specify a parameter of type 'System.String' and try again.



我的假设是 AllowEmptyString会允许吗?

最佳答案

听起来您根本不需要强制参数。使其成为强制性将需要输入,这会使默认值无用。但是,让我们回到您描述的错误。

该属性按预期工作。问题是你如何调用你的脚本。让我们尝试将以下代码作为函数和脚本:

[CmdLetBinding()]
param(
[Parameter(Mandatory=$true)]
[AllowEmptyString()]
[string]$User = 't'
)

"`$User has value '$user'. Is it null? $($user -eq $null). Type is $($user.GetType().Name)"

演示:
#Inside a function
PS> t -User ""
$User has value ''. Is it null? False. Type is String

#Inside a script
PS> .\Untitled-5.ps1 -User ""
$User has value ''. Is it null? False. Type is String

#Running the following command from cmd
cmd> powershell.exe -file Untitled-5.ps1 -User ""
$User has value ''. Is it null? False. Type is String

但是,当您在 PowerShell session 中运行最后一行时,PowerShell 将解析导致参数为空值(无引号)的字符串。
PS> powershell.exe -file Untitled-5.ps1 -User "" 
D:\Downloads\Untitled-5.ps1 : Missing an argument for parameter 'User'. Specify a parameter of type 'System.String' and
try again.
+ CategoryInfo : InvalidArgument: (:) [Untitled-5.ps1], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : MissingArgument,Untitled-5.ps1

Powershell.exe 不打算在 PowerShell 进程中使用。您可以通过直接在 PowerShell 进程(第二个示例)中调用脚本来解决此问题,运行 PowerShell.exe …从 cmd/run/scheduled task++(任何其他地方)或通过确保 PS 不解析您的参数,因此它实际上会输入引号。

这可以通过转义引号来完成
PS> powershell -File Untitled-5.ps1 -User `"`"

或者使用 --%
PS> powershell -File Untitled-5.ps1 --% -User ""

关于powershell - 我如何允许 powershell 接受命名参数的空字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50114672/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com