- name: Install Software from SMB hosts: dynamic_windows gather_facts: no vars: installer_args: "/S" unc_file: "{{ smb_path | regex_replace('\\\\+$', '') }}\\{{ installer_file }}" tasks: - name: Check installer on share and list folder ansible.windows.win_powershell: parameters: Share: "{{ smb_path }}" User: "{{ smb_user }}" Pass: "{{ smb_pass }}" File: "{{ installer_file }}" script: | param($Share, $User, $Pass, $File) $ErrorActionPreference = 'Stop' net use $Share /delete /y 2>&1 | Out-Null $out = net use $Share /user:$User $Pass 2>&1 if ($LASTEXITCODE -ne 0) { throw "net use failed: $out" } $names = Get-ChildItem -LiteralPath $Share | Select-Object -ExpandProperty Name $Ansible.Result = @{ exists = [bool]($names -contains $File) files = $names } net use $Share /delete /y 2>&1 | Out-Null register: share_check no_log: true - name: Show files on share ansible.builtin.debug: var: share_check.result.files - name: Fail if installer not found ansible.builtin.fail: msg: "Файл {{ installer_file }} не найден в {{ smb_path }}" when: not share_check.result.exists - name: Install {{ installer_file }} ansible.windows.win_package: path: "{{ unc_file }}" username: "{{ smb_user }}" password: "{{ smb_pass }}" state: present arguments: "{{ installer_args }}" product_id: "{{ product_id | default(omit) }}" creates_path: "{{ creates_path | default(omit) }}" no_log: true