Call powershell function in file without dot sourcing

后端 未结 2 1373
无人及你
无人及你 2021-01-18 22:06

Is this possible if I only have one function in the file named the same as the file? I seem to remember reading about it before. Something like this:

hello.ps1

相关标签:
2条回答
  • 2021-01-18 22:41

    By default, the function hello will only be accessible at script scope unless you dot-source the script. That means, once the script exits, it is no longer visible. If you want it available outside of hello.ps1 without dot-sourcing, you can declare the function at global scope:

    function global:hello {
        Write-Host 'Hello, world' 
    }
    

    Then you can just execute the script and then call the function:

    PS C:\temp> .\hello.ps1
    PS C:\temp> hello
    Hello, world
    

    For more info on powershell scopes, check out the help.

    If you want to just have the code in the function execute, just don't surround it by a function declaration. In hello.ps1:

        Write-Host 'Hello, world' 
    

    Then just call it:

    PS C:\temp> .\hello.ps1
    Hello, world
    
    0 讨论(0)
  • 2021-01-18 22:44

    I would get rid of the function call altogether. You don't lose named parameters and cmdlet wrapping at all. So this:

     function Hello
     {
        [CmdletBinding()]
        param(
           [Parameter(Mandatory=$true)]
           $Message
        )
        Write-Host "Hello, $Message!"
     }
    

    becomes:

     [CmdletBinding()]
     param(
        [Parameter(Mandatory=$true)]
        $Message
     )
     Write-Host "Hello, $Message!"
    

    And you can all it like this:

    > .hello.ps1 "World"
    
    0 讨论(0)
提交回复
热议问题