我正在尝试在远程(Windows 2008 Server R2)计算机上运行powershell脚本。直接从powershell执行时,以下代码非常有用。 (即所有内容都设置正确,WinRM服务正在运行,主机互相信任,登录正确...)
但是,当我从Jenkins实例执行完全相同的代码(在我测试的同一台机器上运行)时,我得到 PSSessionStateBroken 连接失败,。 (未发布完整错误,因为它在我的机器上是德语。)
我认为这意味着Jenkins使用PowerShell的方式不同,或者具有不同的powershell / winrm设置或权限不足。有什么想法吗?
$computer = "<some ip>"
$user = "Administrator"
$password = "<secretpassword>"
$securepassword = ConvertTo-SecureString -String $password -AsPlainText -Force
$cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $user, $securepassword
Invoke-Command -ComputerName $computer -ScriptBlock { Get-ChildItem C:\ } -Credential $cred
编辑:通过以管理员身份运行jenkins服务来管理以修复它。适合我,但感觉不对......
答案 0 :(得分:4)
截至2014年3月,Jenkins安装Jenkins服务以作为LocalSystem用户运行(即NT AUTHORITY\SYSTEM
)。 LocalSystem帐户accesses the network using the computer account。
例如,名为JENKINSSERVER
的主机上的Jenkins使用MYDOMAIN\JENKINSSERVER$
Active Directory域中的MYDOMAIN
计算机帐户连接到远程计算机。
这意味着您需要将MYDOMAIN\JENKINSSERVER$
帐户添加为BUILTIN\Administrators
上TARGETSERVER
本地群组的成员:
NET LOCALGROUP "Administrators" "MYDOMAIN\MYSERVER$" /add
Caveat Emptor :这将授予在MYSERVER主机上作为LocalSystem或NetworkService执行的任何代码,以便以管理员身份在TARGETSERVER
上运行远程命令。您可能最好只为此服务创建一个特定的域用户,以限制只有单个Jenkins服务的管理员权限。
答案 1 :(得分:1)
您的Jenkins服务帐户凭据是否有权远程登录目标计算机?
当管理员帐户和常规服务帐户访问时,我会使用ProcMon来监视目标系统。你会看到差异,我打赌它会很明显!祝你好运!