Назад | Перейти на главную страницу

Мой сценарий Powershell для добавления пользователей домена на удаленный компьютер не работает с отказом в доступе

У меня есть такой сценарий:

Param(
    [String[]] $targetMachines,
    [String] $targetMachineListFile,
    [String] $group,
    [String] $domain,
    [String] $user
)

if (-not ($targetMachines))
{
    $targetMachines = Get-Content $targetMachineListFile
}

foreach ($targetMachine in $targetMachines) 
{
    Write-Output "Adding domain user $user@$domain to $targetMachine"
    $de = [ADSI]"WinNT://$targetMachine/$group,group" 
    $de.Add("WinNT://$domain/$user")
    Write-Output "Done domain user $user@$domain to $targetMachine"
}

Проблема в том, что когда я добавляю пользователя, он выдает ошибку:

Exception calling "Add" with "1" argument(s): "Access is denied.
"
At C:\Users\jz03qx\source\repos\misc\server-prep\Add-User-To-Remote.ps1:20 char:5
+     $de.Add("WinNT://$domain/$user")
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : CatchFromBaseAdapterMethodInvokeTI

Что не так со сценарием? или что может быть не так с настройкой?

Я предполагаю, что вы неявно используете запрещенный двойной переход аутентификации. При добавлении пользователя в группу на целевой машине целевая машина пытается разрешить пользователя в Active Directory. Однако это требует повторной аутентификации в Active Directory, что запрещено.

Вы можете попробовать создать сеанс на основе CredSSP для целевой машины и выполнить команду в сеансе. Пример (не тестировался):

$credential = get-credential
$session = New-PSSession -ComputerName $targetmachine -Credential $credential -Authentication Credssp
Invoke-Command -Session $session -ScriptBlock {
    $de = [ADSI]"WinNT://$using:targetMachine/$using:group,group" 
    $de.Add("WinNT://$using:domain/$using:user")
}

Видеть https://docs.microsoft.com/en-us/powershell/scripting/setup/ps-remoting-second-hop?view=powershell-5.1 для получения дополнительной информации о двойном прыжке и возможных решениях.

CredSSP должен быть включен явно! На клиенте вы должны запустить:

Enable-WSManCredSSP -Role Client

И на сервере:

Enable-WSManCredSSP –Role Server

Имейте в виду, что CredSSP предоставляет ваши учетные данные (в основном в виде обычного текста) целевой машине. В случае компрометации целевой машины ваши учетные данные также будут скомпрометированы.