仅为非空值导入 CSV 和设置属性

Import-CSV adn set attributes only for non-empty values

我有这样的 CSV

EMP_ID DEP_ID LOGIN_AD
0102   042    jane.doe
0103          john.doe
0104   042    
0105   046    john.smith

我想创建脚本来导入此 csv 和用户帐户上的下一个设置值,例如此 extenssionattribute1 = EMP_ID 和 extenssionattribute2 = DEP_ID。主要是脚本应该跳过空值。在下面的示例中,脚本应在 jane.doe 帐户上设置 extenssionattribute1 = 0102,extenssionattribute2 = 042,但在 john.doe 上仅设置 extenssionattribute1 = 0103,脚本应跳过没有 LOGIN_AD.

的行

现在我正在尝试这样的事情:

Import-CSV "c:\test.csv" | foreach-object {
$adLogin = @($_.LOGIN_AD) | where-object{$_};
if (Get-AdUser -Identity $adLogin) 
{
if ($_.EMP_ID) {Set-admUser $adLogin -Replace @{extensionAttribute1 = $_.EMP_ID} 
if ($_.DEP_ID) {Set-admUser $adLogin -Replace @{extensionAttribute2 = $_.DEP_ID} 
}

但当 LOGIN_AD 为空时我仍然遇到错误。你能帮帮我吗?

给定 CSV,您需要将分隔符指定为 space,然后您需要 select 个 LOGIN_AD 不为空的对象,最后,执行您需要的操作一个 ForEach-Object 循环,也不要忘记加载属性:

Import-CSV "c:\test.csv" -Delimiter ' ' | where-object{$_.LOGIN_AD -ne ""}| foreach-object {
    $adLogin = $_.LOGIN_AD

    if (Get-AdUser -Identity $adLogin -properties extensionAttribute1,extensionAttribute2) 
    {
        if ($_.EMP_ID) {Set-admUser $adLogin -Replace @{extensionAttribute1 = $_.EMP_ID} }
        if ($_.DEP_ID) {Set-admUser $adLogin -Replace @{extensionAttribute2 = $_.DEP_ID} }
    }
}