如何使用 PowerShell 从 csv 列中检查空行

灌肠

我在名为“Exchange Mailboxes”的 csv 列中混合了这样的数据(有些行是空的)。

Exchange Mailboxes
Include:[[email protected]] 
Include:[[email protected]]

Include:[[email protected]]

我尝试先检查该行是否为空。如果它是空的,那么只需为这些行分配空字符串。如果特定的 csv 行不为空,则使用 E​​XOMailbox 获取其名称和 ID。

另一个词是,我如何跳过空行?

我像这样尝试过,但由于某种原因它不起作用。

$importFile = Import-Csv -Path "C:\AuditLogSearch\Dis\Modified-Audit-Log-Records.csv"

 foreach ($csvFile in $importFile){
    if([string]::IsNullOrEmpty($csvFile.'Exchange Mailboxes')){

      $userName = ""
      $userId = ""

    }else{
      $exoMailbox = $csvFile.'Exchange Mailboxes'.Split([char[]]@('[', ']'))[1]
      $exoUser = Get-EXOMailbox -Filter "PrimarySmtpAddress -eq  '$exoMailbox'"

      $userName = $exoUser.DisplayName
      $userId = $exoUser.Identity

    }

}
mklement0

如果要排除具有空Exchange Mailboxes列值的行:

$importFile = 
  Import-Csv "C:\AuditLogSearch\Dis\Modified-Audit-Log-Records.csv" |
  Where-Object 'Exchange Mailboxes' -ne ''

如果您想排除所有列都为空的行(这也适用于您的(非典型)单列CSV):

$importFile = 
  Import-Csv "C:\AuditLogSearch\Dis\Modified-Audit-Log-Records.csv" |
  Where-Object { -join $_.psobject.Properties.Value }

笔记:

  • Import-Csv将 CSV 文件的行解析为[pscustomobject]实例,其属性始终将 CSV 的列值反映为字符串

  • $_.psobject.Properties.Value使用内在.psobject属性反映对象的所有属性,并.Properties.Value返回所有属性值。

    • 运算符的一元形式-join直接连接所有 - 根据定义字符串- 值并将结果作为单个字符串返回。

    • 因此,如果所有列值都为空,则结果为空字符串( '');否则,字符串是非空的

  • Where-Object,当给定一个脚本块( { ... }) 时,隐式地将其输出强制转换为[bool]($true$false);在 PowerShell 中,将任何非空字符串转换为[bool]yield $true,而空字符串则转换为$false.


将上述内容与仅从Exchange Mailboxes列值中提取电子邮件地址相结合:

$emailAddresses = 
  Import-Csv "C:\AuditLogSearch\Dis\Modified-Audit-Log-Records.csv" |
  Where-Object { -join $_.psobject.Properties.Value } |
  ForEach-Object { ($_.'Exchange Mailboxes' -split '[][]')[1] }

使用您的样本输入,输出$emailAddresses然后产生:

[email protected]
[email protected]
[email protected]

适用于我认为您的原始代码的意图:

$customObjects = 
  Import-Csv "C:\AuditLogSearch\Dis\Modified-Audit-Log-Records.csv" |
  Where-Object { -join $_.psobject.Properties.Value } |
  ForEach-Object { 
    $exoMailbox = ($_.'Exchange Mailboxes' -split '[][]')[1]
    $exoUser = Get-EXOMailbox -Filter "PrimarySmtpAddress -eq  '$exoMailbox'"
    # Construct and output a custom object with the properties of interest.
    [pscustomobject] @{  
      UserName = $exoUser.DisplayName
      UserId = $exoUser.Identity
    }
  }

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章