You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Set-ADUser脚本自定义对象属性未被识别,无法跳过空值更新AD求助

问题:PowerShell脚本更新AD时跳过属性循环导致无法更新

我正在编写每半小时运行一次的PowerShell脚本,从HR系统拉取CSV文件更新Active Directory(AD)记录。CSV列名与AD属性名不匹配,所以我创建了自定义对象映射对应属性,同时需要跳过CSV中的空值列(无法提前知晓哪些列是空的,不同文件情况不同)。

当前脚本未报错,但处理自定义对象属性的ForEach循环直接跳过,导致$setSplat为空,无法执行Set-ADUser更新操作。

我的代码

$ADObjectToUpdate = [PSCustomobject]@{
    GivenName = $CSVUserData.FirstName 
    Surname = $CSVUserData.LastName
    Description = $DescriptionString
    Title =$CSVUserData.JobTitle
    Department = $CSVUserData.Department
    Manager = $ADManager # 这是一个AD对象
    Company = $CSVUserData.Company
    EmployeeID = $CSVUserData.EmployeeNumber
    StreetAddress = $CSVUserData.WorkAddress
    City = $CSVUserData.City
    State = $CSVUserData.State
    PostalCode = $CSVUserData.Zip
    Country = $CSVUserData.Country
    Office = $CSVUserData.Location
    LogonWorkstations = $CSVUserData.WorkstationLocation
    EmailAddress = $CSVUserData.EmailAddress
}
$setSplat = @{}
ForEach($_ in $ADObjectToUpdate.PSObject.Properties) 
{
  If(-not([string]::IsnullOrWhiteSpace($_.Value)))
  {
      $setSplat[$_.Name] = $_.Value
  }
}

Set-ADUser -Identity $CurrentADUser @setSplat

问题分析

核心问题是空值判断逻辑不兼容非字符串类型的属性:

  • [string]::IsNullOrWhiteSpace()仅适用于字符串类型,当遇到Manager这种AD对象(非字符串)时,该方法会将其转换为字符串后判断,若AD对象的字符串表示为空(或转换失败),就会被错误过滤。
  • 部分属性的空值可能是$null而非空白字符串,原判断逻辑也无法正确识别。

解决方案

修改空值判断逻辑,区分字符串与非字符串类型:

$setSplat = @{}
ForEach($_ in $ADObjectToUpdate.PSObject.Properties) 
{
    # 处理字符串类型属性,过滤空白/空字符串
    if ($_.Value -is [string]) {
        if (-not [string]::IsNullOrWhiteSpace($_.Value)) {
            $setSplat[$_.Name] = $_.Value
        }
    }
    # 处理非字符串类型,仅过滤$null值
    else {
        if ($_.Value -ne $null) {
            $setSplat[$_.Name] = $_.Value
        }
    }
}

调试建议

可以先输出自定义对象的属性详情,确认属性是否正确创建:

# 输出所有属性的名称、值和类型,用于调试
$ADObjectToUpdate.PSObject.Properties | Select-Object Name, Value, @{Name='ValueType'; Expression={$_.Value.GetType().Name}}

内容的提问来源于stack exchange,提问作者RobinOlsen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 03:05:27