Why $PSCommandPath is $null in ISE or PowerGUI

This topic contains 1 reply, has 2 voices, and was last updated by  Dave Wyatt 3 years, 9 months ago.

  • Author
    Posts
  • #13308

    GS
    Participant

    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

  • #13310

    Dave Wyatt
    Moderator

    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"
    }
    

You must be logged in to reply to this topic.