我有以下脚本:
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 会将您的(基本上是纯文本)凭据暴露给目标机器。如果目标机器被攻陷,您的凭据也会被攻陷。