Powershell playbooks

41 views
Skip to first unread message

yarecki wr

unread,
Feb 8, 2019, 12:35:23 PM2/8/19
to Ansible Project

I'm testing Ansible to see if I can successfully control various aspects of Windows management. I'm getting stuck on using variables and conditionals and can't interpret the error information that comes back.

I tried to run a playbook against a test machine where I used some conditionals and loop statements as in the example below.

---
hosts: myhost.domain.local
tasks:
  - name: get all connected network adapters
    win_shell: |
      $adapters = @(Get-NetAdapter)
      foreach($item in $adapters){if($item.status -eq "Up"){$item}}

So above I first assign a variable to a list of all network adapters that can be found on my system and then I wan't to extract only those that are actually up and connected. I'm getting some cryptic response where I can find syntax errors so the above code must be somehow misinterpreted. I'll probably would want to expand this code to gather more details but since I'm stuck just with the basics I can't move forward. BTW not sure why the | pipe character after win_shell. Just seen it in a couple of simple examples on the web. Couldn't find any good examples and there was no answer in other forum.

Игорь Туровский

unread,
Feb 10, 2019, 5:13:09 AM2/10/19
to ansible...@googlegroups.com
Pipe character after win_shell indicates that Powershell code should be treated as multi-lined. 
What error did you get?

пт, 8 февр. 2019 г. в 20:35, yarecki wr <yar...@gmail.com>:
--
You received this message because you are subscribed to the Google Groups "Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email to ansible-proje...@googlegroups.com.
To post to this group, send email to ansible...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/ansible-project/3b463339-bcf9-4dfc-aed3-669f9c060ee2%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

yarecki wr

unread,
Feb 11, 2019, 11:28:22 AM2/11/19
to Ansible Project
Strange but I run the playbook again and it actually gives me some output. Many thanks for the explanation regarding the pipe sign. Makes things more clear now.
Problem is in stdout_lines, this doesn't display the same info that it would display when it was run directly on the Windows box. It cuts off last two columns which are my MACaddress and LinkSpeed.

MKPhil

unread,
Feb 21, 2019, 11:03:08 AM2/21/19
to Ansible Project
You can reduce the PowerShell to one line and, if you're only interested in the output as a string, you can use Out-String command with the -Width parameter and a suitably large value:

win_shell: Get-NetAdapter | Where-Object {$_.Status -eq "up"} | Out-String -Width 4096

results in:

Name     InterfaceDescription     ifIndex Status MacAddress        LinkSpeed
----     --------------------     ------- ------ ----------        ---------
Ethernet vmxnet3 Ethernet Adapter      12 Up     00-50-56-00-00-00   10 Gbps


You can also use Select-Object to just pick out the fields you're interested in, e.g.:

win_shell: Get-NetAdapter | Select-Object Name,Status,MacAddress,LinkSpeed | Where-Object {$_.Status -eq "up"} | Out-String -Width 4096
Reply all
Reply to author
Forward
0 new messages