PowerCli Invoke-VMScript Firewalld gotcha and workaroud

I have been working on a project for some time and ran into an issue where I was trying to run a shell script remotely on a Centos 7 VM and it just hangs. Turns out there is an issue with executing firewalld commands from PowerCLI using the invoke-VMscript commandlet. Here is example of the code I was trying to run.

Invoke-VMScript -ScriptText "sh /root/apache.sh” -vm "$VMName" -GuestUser 'root' -GuestPassword 'VMware1!' -ScriptType bash

Here is the apache.sh file

#!/bin/sh
sudo yum -y install httpd
sudo systemctl enable httpd
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
sudo systemctl start httpd.service

When I login and run the apache.sh file locally it works fine. So i found a workaround by scheduling a one time task using the at command. more info on that here. So the new command is

Invoke-VMScript -ScriptText "echo sh /root/apache.sh | at now + 1 minutes” -vm "$VMName" -GuestUser 'root' -GuestPassword 'VMware1!' -ScriptType bash

This way it runs from the Linux OS after PowerCLI has exited.

Leave a Reply

Your email address will not be published. Required fields are marked *

*

This site uses Akismet to reduce spam. Learn how your comment data is processed.