我想使用本地用户登录Windows服务器,然后使用Active Directory用户映射网络驱动器,并使用Ansible自动运行安装程序。
我按照this question的建议创建了PowerShell脚本并执行安装和安装。我使用该脚本如下:
清单:
[winserver]
windows
[winserver:vars]
ansible_user="local_user"
ansible_password="P@ssw0rd"
ansible_connection="winrm"
ansible_winrm_cert_validation=ignore
win_user="domain\aduser"
win_pass="P@55w0rd"
任务yaml:
---
- name: Mount and run a script
script: 'files/maprun.ps1 -map_user {{ win_user }} -map_password {{ win_pass }} -script z:\ascript.ps1'
maprun.ps1
脚本包含以下内容:
param(
$map_user,
$map_password,
$script
)
$PWord="$map_password"|ConvertTo-SecureString -AsPlainText -Force
$myCreds=New-Object System.Management.Automation.PsCredential($map_user,$PWord)
New-PSDrive -Name "Z" -PSProvider "FileSystem" -Root "\\domain\share" -Credential $myCreds
echo Invoke-Command -ScriptBlock $script
我收到错误:
New-PSDrive: A specified logon session does not exist. It may already have
been terminated
大多数点击都会谈到双跳问题,但我试图在远程脚本中指定不同的凭据,因此这不是双跃点问题。另一个答案表明这应该是可能的。该脚本以交互模式工作,因此它与批处理模式有关。我有什么想法可以让它发挥作用吗?
我在Red Hat Enterprise Linux上使用Ansible 2.3.1.0。 Windows是Windows Server 2012 R2。脚本是手动输入的,对不起打字错误。
答案 0 :(得分:-2)
我可以提出一些建议。
所以而不是
script: 'files/maprun.ps1 -map_user {{ win_user }} -map_password {{ win_pass }} -script z:\ascript.ps1'
尝试
script: files/maprun.ps1 "Z:" "{{ win_user }}" "{{ win_pass }}" "z:\ascript.ps1"
maprun.ps1包含以下内容......
# connect to a shared resource and run script
param(
[string]$map_server,
[string]$map_user,
[string]$map_password,
[string]$script
)
# connect to the network drive
net use $map_server $map_password /USER:$map_user
Invoke-Item (start powershell ((Split-Path $MyInvocation.InvocationName) + $script))
net use $uncServer /delete