使用“ win_command:mklink softlinkfile destfile”时找不到mklink.exe \”

时间:2018-07-12 08:26:30

标签: command ansible mklink

我正在使用ansible来管理云中的多个Windows主机,我需要创建一个日志文件并将其链接到另一个文件,因此我使用了以下剧本

- name: init the directory structure of windows
  hosts: '{{windows_hosts}}'
  tasks:
   - name: create log file and link it to log directory
     win_command: mklink log D:\prod\log
     args:
        chdir: D:\prod\project

运行此剧本时,可以成功找到主机,但出现以下错误报告

> TASK [Gathering Facts]
> ********* ok: [111.111.2.40]
> 
> TASK [create log file and link it to log directory]
> ********* fatal: [111.231.76.40]: FAILED! => {"changed": false, "cmd": "mklink log
> D:\\prod\\log", "msg": "Exception calling \"SearchPath\" with \"1\"
> argument(s): \"Could not locate the following executable
> mklink.exe\"", "rc": 2}

并且我在同一目录的远程主机上尝试了此命令,它可以成功执行。我不知道该怎么办……

2 个答案:

答案 0 :(得分:0)

执行以下方式:

---
  - name: Run Windows Command
    hosts: windows
    gather_facts: False

    tasks: 
      - name: win command
        win_shell: cmd /k mklink log D:\prod\log
        args: 
          chdir: D:\prod\project

答案 1 :(得分:0)

win_command用于直接运行可执行文件。因此,没有应用用户的环境,并且您不在dos框或powershell窗口中运行

因此'mklink'实际上不是可执行文件-它是cmd.exe程序的内置功能。因此,要通过win_command运行mklink,您必须运行cmd.exe程序并向其传递一个参数,以告诉它执行“ mklink”的操作,如下所示:

win_command: cmd.exe /k mklink log D:\prod\log