尝试从变量中获取 -Identity 值



我知道最好的做法是使用属性值,如NameDistinguishedname等。但是,我正在使用两个系统,并且Active Directory中唯一在两个系统中相同的字段是extensionAttribute1。下面是代码。错误出在 foreach 循环中,并且不接受变量进行-Identity

Function ArchiveLeavers
{
Write-Host "Archiving leavers. Details below..."
$csvLeavers = Import-Csv -Path $fileLeavers      
    foreach ($user in $csvLeavers)
    {
    $csvID = $user.ExtensionAttribute1
    if (Get-ADUser -filter {extensionAttribute1 -eq $csvID} -SearchBase $LeaverOU)
    {
        Write-Host ($user.GivenName + ' ' + $user.LastName) " is already in leavers"
    }
    else
    {
        ForEach-Object  
        {
        $identity = Get-ADUser -filter {extensionAttribute1 -eq $csvID} | select distinguishedName | Format-Table -HideTableHeaders
        write-host ($user.GivenName + ' ' + $user.LastName) " needs moving"
        Move-ADObject -Identity $identity -TargetPath $LeaverOU;
        Set-ADUser    -Add @{extensionAttribute7=$user.ExtensionAttribute7}
        Write-Host ($user.GivenName + ' ' + $user.LastName) " has been moved"
        }
    }
  }
}

这是错误:

Move-ADObject : 无法将"System.Object[]"转换为类型    参数"Identity"需要Microsoft.ActiveDirectory.Management.ADObject"。指定    方法不受支持。    行:21 字符:57    +Move-ADObject -Identity $identity -TargetPath $F ...    +~~~~~~~~~    + 类别信息 : 无效参数: (:)[Move-ADObject], ParameterBindingException    + FullQualifiedErrorId : CannotConvertArgument,Microsoft.ActiveDirectory.Management.Command.MoveADObject

您正在使用格式表,它将$Identity变量转换为Move-ADObject不知道的对象,这些对象仅获得SAM,Guid,SID等输入类型。

从管道中删除格式表,更改以下内容:

$identity = Get-ADUser -filter {extensionAttribute1 -eq $csvID} | select distinguishedName | Format-Table -HideTableHeaders

对此:

$identity = Get-ADUser -filter {extensionAttribute1 -eq $csvID} 

最新更新