PowerShell:如果输出与字符串匹配,则在CSV列中设置值

时间:2018-04-20 12:48:58

标签: powershell

首先,这是我的第一篇Stack Overflow帖子,所以我很抱歉,如果在其他地方已经回答了这个问题而且我找不到它,但这就是我想要弄清楚的事情。

我循环访问用户名的CSV列表,获取每个用户的Office 365许可证状态,并且我希望根据许可证状态将该字符串写回该用户的CSV。例如,CSV看起来像这样:

Username     License1     License2
user1
user2
user3

以下是代码:

$users = Import-Csv .\users.csv

foreach ($user in $users) {

$licenses = (Get-MsolUser -UserPrincipalName $_.Username).Licenses.AccountSkuId

    if ($licenses -match "XYZ") {
        $_License1 = "XYZ" | Export-Csv .\users.csv -NoTypeInformation
    }
}

因此,如果前两个用户拥有" XYZ"许可证然后CSV将更新为如下所示:

Username     License1     License2
user1        XYZ
user2        XYZ
user3

它无效,我确定问题与我尝试将数据导出回原始CSV的方式有关,但我不知道如何以正确的方式做到这一点。我们非常感谢任何帮助,如果有更好的方法可以做到这一点,我全心全意。

提前致谢!

1 个答案:

答案 0 :(得分:2)

尝试这样的事情:

$users = Import-Csv .\users.csv

foreach ($user in $users) {
    $licenses = (Get-MsolUser -UserPrincipalName $_.Username).Licenses.AccountSkuId

    if ($licenses -match "XYZ") {
        $user.License1 = "XYZ"
    }
}

$users | Export-Csv .\users.csv -NoTypeInformation