Saturday, January 18, 2014

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 =,1,True)
If strError then
    WScript.Echo "Failed with Exit Code" & strError & "."
    WScript.echo "Success"

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 :)