我在名为“Exchange Mailboxes”的 csv 列中混合了这样的数据(有些行是空的)。
Exchange Mailboxes
Include:[[email protected]]
Include:[[email protected]]
Include:[[email protected]]
我尝试先检查该行是否为空。如果它是空的,那么只需为这些行分配空字符串。如果特定的 csv 行不为空,则使用 EXOMailbox 获取其名称和 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
}
}
如果要排除具有空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] 删除。
我来说两句