Author Posts

February 24, 2014 at 11:00 am

Hello,

I'm trying to figure out how to find out where my script is located at the time of execution and from what I researched so far it seems to have been a problem with PS for sometime. I'm running PS 4.0 and inside ISE as well as inside PowerGui when I access $PSCommandPath variable in debug mode it always $null. The same variable works fine if I just use Write-Host $PSCommandPath.
What I want to do is to supply certain default values for parameters like below to inform script where to look for some resource files. It works with $pwd variable but not with $PSCommandPath. How do I reliably access variable informing me where is my script is located which I'm debugging or running?

[Parameter(Mandatory=$False)]
[string]$OutputFile = "$PSCommandPath\output_$(Get-Date -Format ('yyyy_dd_MM_hh_mm')).log",

Thanks,
G

February 24, 2014 at 11:18 am

You can't use certain automatic variables in your param block (such as $PSCommandPath, $MyInvocation, $PSCmdlet, etc); they don't work the way you'd expect them to.

Instead, you can move that logic inside the script or function itself. For example:

param (
    [Parameter(Mandatory=$False)]
    [string]$OutputFile = $null
)

if (-not $OutputFile)
{
    $OutputFile = "$PSCommandPath\output_$(Get-Date -Format yyyy_dd_MM_hh_mm).log"
}