我正在编写一个Powershell脚本来在数据表中创建一个唯一的联系人。步骤如下:
我首先从CSV中提取数据,并将数据放在$dt_uniqueContacts数据表中(只有一列(。然后使用Rows附加其他来源的更多记录。添加
$dt_uniqueContacts.Rows.Add($arow) | Out-Null
这扩展了原来的$dt_uniqueContacts大小。我有";Out Null";在每个行中。添加操作以避免按照其他线程的建议创建空行。
在这之后,我应用了-unique使$dt_uniqueContacts成为唯一的,并将其覆盖回来。
$dt_uniqueContacts = $dt_uniqueContacts.Select("", "Contacts ASC") | Select-Object Contacts -Unique
问题是在唯一操作之后,$dt_uniqueContacts在开头创建了一个额外的行。您不能显示它,它也不会影响rows.count,但是,当执行以下操作时,它会在第一个循环(针对空行(中抛出错误。我不知道如何删除该行,也不知道如何用";如果";语句,null或""不起作用。
foreach ($r in $dt_uniqueContacts) {
$aContact = $r.Contacts
if ($aContact.Contains("'")) {...
它抛出这个错误:
Method invocation failed because [System.DBNull] does not contain a method named 'Contains'.
只有当包含任何函数(即本例中的Contains(时,才会出现此问题。如果我跳过.Contains行,$dt_uniqueContacts foreach中的$null行将不会生成错误,并像没有$null行一样执行。
有什么建议吗?
提前感谢大家。
我使用@JosefZ在评论中建议的内容,通过在细节之前使用DBNull
来检测,比如->
foreach ($r in $dt_uniqueContacts) {
$aContact = $r.Contacts
if ([System.DBNull]::Value -ne $aContact) {
$filter = "FullName = '$($aContact.Replace("'", "''"))'"
$arow = $dt_resources.Select($filter)
....