如何使用 Powershell 从 csv 文件中仅读取一列
Posted
技术标签:
【中文标题】如何使用 Powershell 从 csv 文件中仅读取一列【英文标题】:How to read only one column from csv file using Powershell 【发布时间】:2022-01-07 18:08:04 【问题描述】:我正在处理 powershell 脚本,我正在尝试从我的 csv 文件中仅读取“用户”列,然后将其转换为他们的 Microsoft AzureAD 显示名称,但不确定如何执行此操作,因此如果我可以得到任何帮助或建议。
我的 csv 文件如下所示
C:\AuditLogSearch$($CurDate) Final Audit-Log-Records.csv
User Date &Time Activity
-------------------------------------
abc@gmail.com 11/22/2021 play soccer
kei@gmail.com 10/22/2021 play football
def@gmail.com 11/22/2021 play soccer
def@gmail.com 09/22/2021 play Baseball
xyz@gmail.com 08/22/2021 play soccer
klm@gmail.com 19/22/2021 play football
function Connect-AzureActiveDirectory
$pso = New-PSSessionOption -SkipCACheck:$true -SkipCNCheck:$true -SkipRevocationCheck:$true -OperationTimeout 180000 -ProxyAccessType AutoDetect
Connect-AzureAD -Credential $credential -ConnectionUri https://outlook.office365.com/PowerShell-LiveID -PSSessionOption $pso
$host.ui.RawUI.WindowTitle = "Exchange Online - NAM Production Beta MFA"
Write-Host "Connected to Azure AD"
function Convert-UserColumn
$ImportFile = "C:\AuditLogSearch\$($CurDate) Final Audit-Log-Records.csv"
$ExportFile = "C:\AuditLogSearch\FinalFile.csv"
// I'm struggling with the logic here
$list = @() foreach ($u in $ImportFile.User)
$list += Get-AzureDisplayName -mail $u
Get-AzureADUser -ObjectId
| Export-Csv $ExportFile -NoTypeInformation
尝试使最终导出的 csv 文件看起来像这样 C:\AuditLogSearch\FinalFile.csv
User Date &Time Activity
-------------------------------------
Jonathan Sparkle 11/22/2021 play soccer
Randy Mod 10/22/2021 play football
Hanah P 11/22/2021 play soccer
Hanah P 09/22/2021 play Baseball
Cristiano Ronaldo 08/22/2021 play soccer
Leo Messi 19/22/2021 play football
【问题讨论】:
您好,我看到了您的评论,现在已删除。你能再解释一下这个问题吗?您确定没有重复的 UserPrincipalNames 吗? 哦,好吧,我想这是我的错误。我的导入文件有误,我认为它现在可以工作了。 @SantiagoSquarzon 能否请您再帮我一个,我正在尝试更改活动列值/文本。例如,如果 text = play football,则将其更改为“play futball”,text =“play football”,然后将其更改为“play rugby”等等.. 查看我的更新,如果它解决了您的问题,请考虑接受答案。 【参考方案1】:您可以只更新导入的 CSV 的 User
属性上的值,无需创建 $list = @()
来保存结果。
假设 $ImportFile.User
包含有效的 UserPrincipalNames
Azure AD 用户,您正在努力处理的部分将如下所示(绝对不需要函数):
$ImportFile = Import-Csv "C:\AuditLogSearch\$($CurDate) Final Audit-Log-Records.csv"
$ExportFile = "C:\AuditLogSearch\FinalFile.csv"
foreach ($u in $ImportFile)
$u.User = (Get-AzureADUser -ObjectId $u.User).DisplayName
$ImportFile | Export-Csv $ExportFile -NoTypeInformation
我正在尝试更改活动列值/文本。例如,如果 text = "play football" 则将其更改为 "play futball",或者如果 text = "play football" 则将其更改为 "play rugby" 等等。
这需要if
条件或switch
。即:
# Using this as an Example
$csv = @'
User,Date & Time,Activity
abc@gmail.com,11/22/2021,play soccer
kei@gmail.com,10/22/2021,play football
def@gmail.com,11/22/2021,play soccer
def@gmail.com,09/22/2021,play Baseball
xyz@gmail.com,08/22/2021,play soccer
klm@gmail.com,19/22/2021,play football
'@ | ConvertFrom-Csv
foreach($line in $csv)
$line.Activity = switch($line.Activity)
'play soccer' 'play futball'; break
'play football' 'play rugby'; break
Default $_ # If no matches, leave it as is
$csv | Format-Table
User Date & Time Activity
---- ----------- --------
abc@gmail.com 11/22/2021 play futball
kei@gmail.com 10/22/2021 play rugby
def@gmail.com 11/22/2021 play futball
def@gmail.com 09/22/2021 play Baseball
xyz@gmail.com 08/22/2021 play futball
klm@gmail.com 19/22/2021 play rugby
【讨论】:
以上是关于如何使用 Powershell 从 csv 文件中仅读取一列的主要内容,如果未能解决你的问题,请参考以下文章
使用 Powershell 的备用拆分 CSV 列 [关闭]