【问题标题】:Remotely joining computer to domain using powershell and WMI使用 powershell 和 WMI 将计算机远程加入域
【发布时间】:2016-09-20 02:17:07
【问题描述】:

对于 CI/CD 环境,我正在构建一个 PowerShell 脚本来创建一个新的 Hyper-V VM,它基本上是一个“base-vm”的克隆。此 base-vm 不是域的成员,它是 Windows 工作组成员。

当尝试将计算机添加到域时,我遇到以下问题,当直接在作为 Hyper-V 主机(在管理帐户下运行)的目标计算机上运行时,下面显示的脚本有效,但在从以下位置运行时无效构建服务器(詹金斯)。

流程如下图所示:

失败的脚本部分如下:

Invoke-Command -Session $remoteSession -Scriptblock {
    Rename-Computer -NewName $args[0] -Restart 
} -ArgumentList $vmSettings.ComputerName

Start-Sleep -s 30

$newVmRemoteSession = New-PSSession -ComputerName $vmSettings.ComputerName -Credential $credentials

Invoke-Command -Session $newVmRemoteSession -Scriptblock {
    Add-Computer -Domainname myfunny.domain -Credential $args[0] -Restart
} -ArgumentList $domainAdminCredentials

Remove-PSSession $newVmRemoteSession
Remove-PSSession $remoteSession

Write-Host "Done creating new VM"

$remoteSession 变量包含基于本地管理员凭据的远程 PowerShell 会话。

$newVmRemoteSession 变量包含与具有本地管理员凭据的重命名虚拟机的远程会话。

我通过构建作业运行此脚本时收到的错误:

[base-vm] 连接到远程服务器 base-vm 失败并显示以下错误消息:WinRM 无法完成操作。验证指定的计算机名称是否有效,该计算机可通过网络访问,并且 WinRM 服务的防火墙例外已启用并允许从该计算机进行访问。默认情况下,公共配置文件的 WinRM 防火墙例外限制对同一本地子网中的远程计算机的访问。有关详细信息,请参阅 about_Remote_Troubleshooting 帮助主题。

抛出异常的命令是:

Invoke-Command -Session $newVmRemoteSession -Scriptblock {
    Add-Computer -Domainname myfunny.domain -Credential $args[0] -Restart
} -ArgumentList $domainAdminCredentials`

我一直在寻找这个问题的解决方案,但我找不到错误。首先我认为它与构建服务器和虚拟机之间的信任关系有关,但是当我使用 WinRM 添加该关系时,构建仍然失败。

我使用:winrm s winrm/config/client '@{TrustedHosts="*"}' 来添加关系。

更新:我做的另一件事是使用与构建服务器相同的用户运行脚本。这给了我与上面相同的错误。奇怪的是,用户是运行脚本的服务器上的本地管理员,并且也是该服务器上“远程管理用户”组的成员。

UPDATE2:我发现问题与 Kerberos 与协商身份验证有关。从加入域的工作站运行脚本时,该脚本默认在 Kerberos 方案下运行,而从独立工作站运行时,它在 Negotaite 方案下运行,我从 https://msdn.microsoft.com/en-us/library/windows/desktop/aa378748(v=vs.85).aspx 读取的内容需要一个 SPN。

【问题讨论】:

  • 错误信息提供了一些建议。你跟了吗?结果如何?另外,究竟是哪个语句首先引发了错误?
  • 我一直在寻找这个问题的解决方案,但我找不到错误。首先,我认为它与构建服务器和虚拟机之间的受信任关系有关,但是当我使用 winrm 添加该关系时,构建仍然失败。我使用:`winrm s winrm/config/client '@{TrustedHosts="*"}'` 来添加关系。
  • 在您的 Jenkins 主机上:您是否检查过 a) VM 的新名称可以解析为 IP 地址,b) 您可以连接到 VM 上的端口 5985?
  • Jenkins 主机不访问新 VM,Hyper-V 主机可以。并且错误发生在重命名之前,脚本无法访问“base-vm”,这是必须重命名的模板 VM。我将尝试为此设置添加示意图。
  • 原来问题可能如下:在本地运行时,我作为用户在域中,但是在远程运行时,脚本没有在加入域的 pc 上运行。我会检查一下,然后再回来。 msdn.microsoft.com/en-us/library/aa384295(v=vs.85).aspx

标签: active-directory powershell-remoting


【解决方案1】:

你说得对,这可能是一个身份验证问题。 PowerShell 为这些东西使用 Kerberos,并为加入域的东西设置。 我认为您在添加受信任主机方面是正确的...

http://powershell.com/cs/blogs/tips/archive/2016/01/25/enabling-powershell-remoting-with-ntlm.aspx 上有一篇文章,它解释了如何设置它,并使用与您所描述的略有不同的语法。可以试试吗?

【讨论】:

  • 我认为 winrm s winrm/config/client '@{TrustedHosts="*"}' 做到了这一点。我会查看您发布的链接。
【解决方案2】:

该计算机无法通过域访问,因此我使用CredSSP 连接到它。要启用 credssp,我必须在客户端和服务器上运行 enable-wsmancredssp commandlet,并且必须使用 gpedit.msc 插件来配置访问权限。

【讨论】:

    猜你喜欢
    • 2012-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多