對於CI/CD環境,我構建了一個PowerShell腳本來創建新的Hyper-V虛擬機,該虛擬機基本上是「base-vm」的克隆。這個base-vm不是該域的成員,它是一個Windows工作組成員。使用PowerShell和WMI遠程將計算機連接到域
當試圖將計算機添加到域時,出現以下問題,直接在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會話管理員crendentials。
$newVmRemoteSession
變量包含通過本地管理員crendentials重命名的虛擬機的遠程會話。
通過構建作業運行此腳本,而我收到的錯誤:
[基礎-VM]連接到遠程服務器基礎-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? –