Команда Powershell для замены заголовка пользователя AD в поле заголовка не работает? - PullRequest
0 голосов
/ 06 ноября 2019

Я создал скрипт для проекта с некоторым кодом, который мне слили с моим собственным. Большинство команд, которые хороши, но, к сожалению, две команды не работают.

Эти команды:

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

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

Есть идеи? Я ценю помощь!

Вот полный сценарий:

$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"

1 Ответ

0 голосов
/ 06 ноября 2019

Я думаю, что лучше немного прояснить ваш код. Посмотрите на это:

$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

Несколько советов:

  • Используйте Write-Verbose, чтобы показать, что происходит в сценарии. Yuo может отключить / включить это, закомментировав VerbosePreference.

  • Всегда начинать с извлечения объекта вместо работы с текстовыми строками ($UserName против $ADUser). См. Get-ADUser как самое первое действие.

  • Работайте с Try/Catch в случае неудачи.

  • Всегда используйте имена параметров. Это делает более понятным то, что вы пытаетесь сделать.

...