Skip to main content

Calling PS1 from VBS and gotchas with cmdletbindingattribute() - Part 2

This post is in continuation of my previous post where things got interesting while trying to execute a PS1 from a VBScript which will start/stop the website.

At the end of post there was this interesting case where we tried to stop a website which did not exist ...But we would always get a Return code of 0 ...or Success message.

Now that is bad for a Production Script as it should fail if we didn't give the correct website name.

So for this post my sample VBScript will remain almost same with only one modification.....on the website name (in Bold Red below):

Set objShell = CreateObject("WScript.Shell")
strCommand = "powershell.exe -noprofile -file C:\temp\test2.ps1 -websitename WebSiteDoesnotExist -action stop -verbose"

strError = objshell.run(strCommand,1,True)
If strError then
                        
    WScript.Echo "Failed with Exit Code" & strError & "."
else
    WScript.echo "Success"
endif 

So what could be the issue...So I tried to execute a simple PS1 first to check if it returns back the proper Exit code to the caller VBS. I used the below PS1 for testing:


Now Let's run this PS1 from the sample VBS (have to change the path of the PS1 to C:\temp\Dex1.ps1 )




Hmmm...still success which means a zero exit code is being returned.
Now let's try a very very minimal PS1 with one line (named it Dex2.ps1)



Let's give this a run:


Voila ! that works.......So I went back tried a few things and it appears if I use the cmdletbinding() attribute to make this an advanced function it doesn't work. Strange cause I tried the same thing in my Windows 7 machine and it works.

So at last below is my machine specs where I was trying this out:




At the end would just say that PowerShell sometimes behaves in an erratic way....but there is a way out, always and in the process you might learn something new :)





Popular posts from this blog

Test connectivity via a specific network interface

Recently while working on a Private cloud implementation, I came across a scenario where I needed to test connectivity of a node to the AD/DNS via multiple network adapters.  Many of us would know that having multiple network routes is usually done to take care of redundancy. So that if a network adapter goes down, one can use the other network interface to reach out to the node. In order to make it easy for everyone to follow along, below is an analogy for the above scenario: My laptop has multiple network adapters (say Wi-Fi and Ethernet) connected to the same network. Now how do I test connectivity to a Server on the network only over say Wi-Fi network adapter?

PowerShell + SCCM : Run CM cmdlets remotely

Today I saw a tweet about using implicit remoting to load the Configuration Manager on my machine by Justin Mathews . It caught my eye as I have never really tried it, but theoretically it can be done. Note - The second tweet says "Cannot find a provider with the name CMSite", resolution to which is in the Troubleshooting section at the end.

Azure DevOps Tips & Tricks - Find private REST APIs

Original source -  Azure DevOps Tip - Find private APIs Often working with Azure DevOps, I hit a wall trying to automate some tasks but there are no REST API's made public yet. It was one of those task of automating creation of Environments in multi-stage YAML based pipelines in AzDO. Quick research reveals that this has been requested in uservoice  (please upvote). Let's see one of the very simple ways to discover some of these APIs.