gpt4 book ai didi

powershell - 如果设置了数据类型,参数值不能设置为空

转载 作者:行者123 更新时间:2023-12-03 14:35:24 25 4
gpt4 key购买 nike

我刚刚输入了一个很长的问题,只是为了在发布之前自己找出答案。但是,它仍然不是一个完美的解决方案,我想知道我是否可以得到以下为什么不起作用的解释。

我想做的是有一个可选参数,如果没有设置,将为空。我希望该参数是一个字符串。

所以我会做这样的事情:

function myfunction {
param([string]$x = $null)
set-aduser -identity someuser -officephone $x
}

通过这样做,似乎 $x 永远不会为 null,即使我稍后在代码中明确设置它也是如此。如果我要删除 [string],它工作正常。只是想知道为什么会这样。这没什么大不了的,但我不明白为什么它不起作用。

最佳答案

这是因为您将参数值转换为字符串:

param([string]$x = $null)
^^^^^^^^

$null 转换为字符串总是返回空字符串:

PS > [string]$x = $null
PS > $x.GetType()

IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True String System.Object


PS > $x.Length
0
PS >

解决此问题的一种方法是删除强制转换并使用 -is operator 自行检查变量的类型:

function myfunction {
param($x)
if ($x -is [string] -or $x -eq $null) {
set-aduser -identity someuser -officephone $x
}
}

如果用户传递了错误类型的参数,您可能还应该输出错误,否则该函数显然什么都不做,这可能会造成混淆。

如果您已经执行了所有这些操作,请购买,您应该问问自己,让 Set-ADUser 为您输出错误是否更好。它会更高效,涉及更少的代码,并最终产生相同的结果。

关于powershell - 如果设置了数据类型,参数值不能设置为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30179110/

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