Я пытаюсь написать сценарий, который проверяет AD OU для любых учетных записей, которые включены или не установлены требуемый пароль, или пароль никогда не истекает или не установлен скрытых от списка адресов. Затем скрипт отключит любой из них в целях безопасности. Вот сценарий до сих пор:Powershell: Error wieth Set-ADUser
Function Update-ADUser
{
[CmdletBinding()]
param(
[Parameter(Mandatory=$true)]
[string]$user
)
BEGIN{}
PROCESS{
Set-ADUser -instance $user -Server dc01
}
END{}
}
$lostUsers = Get-ADUser -filter {PasswordNotRequired -eq $true -or PasswordNeverExpires -eq $true -or Enabled -eq $true -or msExchHideFromAddressLists -eq $false } -SearchBase "OU=Lost Users,OU=DEPT,DC=School,DC=edu" -Server dc01 -properties enabled, PasswordNeverExpires, PasswordNotRequired, msExchHideFromAddressLists
foreach ($user in $lostUsers)
{
if ($user.PasswordNotRequired -eq $true)
{
$user.PasswordNotRequired = $false
}
if ($user.PasswordNeverExpires -eq $true)
{
$user.PasswordNeverExpires = $false
}
if ($user.msExchHideFromAddressLists -ne $true )
{
$user.msExchHideFromAddressLists = $true
}
if ($user.Enabled -eq $true)
{
$user.Enabled = $false
}
Update-ADUser -user $user
}
Большая часть сценариев работает нормально. $lostUsers
создает массив, который использует Get-ADUser
для поиска только записей, имеющих один из необходимых атрибутов. Затем мои инструкции foreach/if
устанавливают каждый атрибут для того, что должно быть для каждой записи.
Проблема возникает, когда я вызываю функцию Update-ADUser
. Я получаю сообщение об ошибке, Set-ADUser : The instance parameter object must be of type: 'Microsoft.ActiveDirectory.Management.ADUser'.
Я попытался удалить [строку] из [string]$user
в функции, но это дает мне другую ошибку, Set-ADUser : The server is unwilling to process the request.
я использую учетную запись администратора домена, чтобы запустить сценарий, так что я знаю, что это не вызывает эта ошибка.
я мог бы использовать Set-ADUser
в каждом if
заявлении, вместо того, чтобы вызвать функцию Update-ADUser
, но это не кажется эффективным, как сценарий затем сделать до четырех изменений в записи, а не только один с функцией. Я также подумал о том, чтобы просто использовать один оператор для изменения всех четырех атрибутов для всех найденных записей, но это кажется неэффективным, так как некоторые атрибуты уже были правильно установлены и, таким образом, просто будут записаны снова.
Не могу понять, почему команда Set-ADUser
не работает. Я в основном скопировал синтаксис из справки Set-ADUser
. Может ли кто-нибудь просветить меня по этому поводу?
Обновление: после дальнейших исследований выяснилось, что нулевые атрибуты могут привести к «нежеланию обрабатывать ошибку запроса». Тем не менее, проверка тестового пользователя $, и я не вижу никаких нулей, но все равно получаю ошибку. – David