我的用于将域用户添加到远程计算机的 Powershell 脚本失败,并被拒绝访问

我的用于将域用户添加到远程计算机的 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
  • 我有远程机器的管理员访问权限
  • 我正在以管理员权限在 powershell 中运行它。

脚本出了什么问题?或者设置出了什么问题?

答案1

我猜你隐式使用了被禁止的身份验证双跳。在目标机器上将用户添加到组时,目标机器正在尝试解析 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 会将您的(基本上是纯文本)凭据暴露给目标机器。如果目标机器被攻陷,您的凭据也会被攻陷。

相关内容