gpt4 book ai didi

powershell - 尽管从未分配过值,但变量据说不为空

转载 作者:行者123 更新时间:2023-12-02 04:43:02 26 4
gpt4 key购买 nike

为简洁起见,缩短了代码:

Function Add-DatabaseUser
{
Param(
[Parameter(Mandatory=$true, Position = 0)]
[string] $samaccountname
,[Parameter(Position = 1)]
[string] $username = $null
)

if ($samaccountname -notmatch "[a-z0-9]*\\[a-z0-9]")
{
throw new [System::ArgumentException] "SAMAccountName was not in the correct format."
}

if($username -eq $null)
{
$username = $samaccountname
}

# Code omitted...

Try
{
Write-Host "Creating user..."
$user = New-Object ("Microsoft.SqlServer.Management.Smo.User") $database, $username
$user.Login = $login.Name
$user.Create() # Exception thrown.
}
Catch
{
# Code omitted.
}

我得到的异常如下:

对象或列名称丢失或为空。对于 SELECT INTO 语句,验证每一列都有一个名称。对于其他语句,请查找空别名。别名不允许定义为“”或[]。将别名更改为有效名称。

发生这种情况是因为 $username 的值为 null。然而,我在脚本的开头有一个 if 语句来检查它是否为空,如果是,则为其分配一个值。但显然调试器将 $username -eq $null 计算为 False。

这是为什么?

编辑:可能应该提到这就是我在 PowerShell 中调用该函数的方式:

Add-DatabaseUser -samaccountname "mycomputer\username"

最佳答案

我相信这是因为您将 username 变量类型转换为字符串,然后将其设置为 $null 作为默认值。类型转换导致它变成空字符串或“”,这与 $null 不同。

摆脱你的类型转换,或者也进行评估:

if($username -eq $null -or $username -eq "" )
{
$username = $samaccountname
}

关于powershell - 尽管从未分配过值,但变量据说不为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32102412/

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