简体   繁体   中英

Powershell command to replace AD user's title in title field not working?

I have created a script for a project with some code which I was given fused with my own. Most of the commands which are great, but unfortunately two commands are not working.

These commands are:

Set-ADUser $UserName -replace @{title="Former Employee" + $title}

Move-ADObject -Identity $UserName -TargetPath "OU=Former Employee,OU=Users,OU=Contoso,DC=Contoso,DC=local"

Any ideas? I appreciate the help!

Here is the full script:

$UserName = Read-Host "Please enter username to be disabled"

if ($UserName) {
    ''
} Else {
    'User not Found'
}
Disable-ADAccount $UserName
Get-ADUser $UserName -Properties MemberOf | ForEach-Object {
$_.MemberOf | Remove-ADGroupMember -Members $_.DistinguishedName -Confirm:$false }

$title = get-aduser $UserName -properties title           
$title = $title.title
$old=Get-ADuser $UserName -properties Description
$old = $old.description
$new = "DISABLED " + $old
set-aduser $UserName -description $new
set-aduser $UserName -clear "manager"
set-aduser $UserName -clear "telephonenumber"

# these two:
set-aduser $UserName -replace @{title="Former Employee" + $title}
Move-ADObject -Identity $UserName -TargetPath "OU=Former Employee,OU=Users,OU=Contoso,DC=Contoso,DC=local"

I think it's better to clear up a bit of your code. Have a look at this:

$SamAccountName = Read-Host 'Please enter the SamAccountName of the user you want to disable'

$VerbosePreference = 'SilentlyContinue'
$VerbosePreference = 'Continue'

Try {
    $ADUser = Get-ADUser -Identity $SamAccountName -Properties MemberOf, Title, Description
    Write-Verbose  "User '$($ADUser.Name)' found in AD"
}
Catch {
    throw "No user found in AD with SamAccountName '$SamAccountName'"
}

Write-Verbose 'Disable user'
Disable-ADAccount $ADUser

foreach ($Group in $ADUser.MemberOf) {
    Write-Verbose "Remove user from group '$Group'"
    Remove-ADGroupMember -Identity $Group -Members $ADUser -Confirm:$false
}

$NewTitle = "Former Employee {0}" -f $ADUser.Title
Write-Verbose "Set 'Title' to '$NewTitle'"
Set-ADUser -Identity $ADUser -Title $NewTitle

$NewDescription = "DISABLED {0}" -f $ADUser.Description
Write-Verbose "Set 'Description' to '$NewDescription'"
Set-ADUser -Identity $ADUser -Description $NewDescription

foreach ($Property in @('Manager', 'telephonenumber')) {
    Write-Verbose "Clear property '$_'"
    Set-ADUser -Identity $ADUser -Clear $Property    
}

$NewTargetPath = "OU=Former Employee,OU=Users,OU=Contoso,DC=Contoso,DC=local"
Write-Verbose "Move AD User to '$NewTargetPath'"
Move-ADObject -Identity $ADUser -TargetPath $NewTargetPath

Some tips:

  • Use Write-Verbose to show what is happening in the script. Yuo can disable/enable this by commenting out the VerbosePreference .

  • Always start with retrieving an object instead of working with text strings ( $UserName vs $ADUser ). See Get-ADUser as the very first action.

  • Work with Try/Catch in case things fail.

  • Always use the parameter names. It makes it more clear on what you're trying to do.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM