在从SQL中提取数据时,该行中的某些列为空。我收到异常消息:
使用“ 1”参数调用“ GetString”的异常:“无法强制转换 类型为“ System.DBNull”的对象,类型为“ System.String”。
我该如何处理?看来基本上只是移至下一行,但我需要所有行和所有列。如果该列为空,那么我可以,但是我想需要将其设置为空字符串。此数据将用于为AD中的用户设置详细信息。当我使用Set-ADUser
命令时,即使该变量为null,也需要使用它。我不希望PowerShell不执行Set-ADUser
命令,因为特定变量为空。最失败的一个是supr_username。
我花了很长时间从Oracle sql表获取输出,以便可以将其用于Set-ADUser
。我还没有找到任何可以做的事情。
[pscustomobject]@{
Identity = $_.GetString(2)
Title = $_.GetString(3)
Department = $_.GetString(4)
MSC = $_.GetString(5)
Office_Location = $_.GetString(6)
Office_Phone = $_.GetString(7)
Supr_username = $_.GetString(10)
}
}````
答案 0 :(得分:0)
您可以使用空字符串(""
)的值初始化自定义对象属性。然后,您可以测试列索引(普通)是否包含DBNull
,如果不是DBNULL
,则可以转换为字符串。
$obj = [pscustomobject][ordered]@{Identity = ""
Title = ""
Department = ""
MSC = ""
Office_Location = ""
Office_Phone = ""
Supr_username = ""
}
$obj.Identity = if (!$_.isDbNull(2)) { $_.GetString(2) }
$obj.Title = if (!$_.isDbNull(3)) { $_.GetString(3) }
$obj.Department = if (!$_.isDbNull(4)) { $_.GetString(4) }
$obj.MSC = if (!$_.isDbNull(5)) { $_.GetString(5) }
$obj.Office_Location = if (!$_.isDbNull(6)) { $_.GetString(6) }
$obj.Office_Phone = if (!$_.isDbNull(7)) { $_.GetString(7) }
$obj.Supr_username = if (!$_.isDbNull(10)) { $_.GetString(10) }
$obj