在没有点源的情况下调用powershell函数

Cal*_*res 5 powershell

如果我在名为与文件相同的文件中只有一个函数,这可能吗?我似乎记得以前读过它.像这样的东西:

hello.ps1

function hello {
    Write-Host 'Hello, world'
}
Run Code Online (Sandbox Code Playgroud)

Aar*_*sen 6

我会彻底摆脱函数调用.您根本不会丢失命名参数和cmdlet包装.所以这:

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

变为:

 [CmdletBinding()]
 param(
    [Parameter(Mandatory=$true)]
    $Message
 )
 Write-Host "Hello, $Message!"
Run Code Online (Sandbox Code Playgroud)

你可以像这样:

> .hello.ps1 "World"
Run Code Online (Sandbox Code Playgroud)


zda*_*dan 5

默认情况下,除非您对脚本进行点源,否则只能在脚本范围访问函数hello .这意味着,一旦脚本退出,它就不再可见.如果您希望在没有点源的情况下在hello.ps1之外使用它,则可以在全局范围内声明该函数:

function global:hello {
    Write-Host 'Hello, world' 
}
Run Code Online (Sandbox Code Playgroud)

然后你可以只执行脚本然后调用函数:

PS C:\temp> .\hello.ps1
PS C:\temp> hello
Hello, world
Run Code Online (Sandbox Code Playgroud)

有关powershell范围的更多信息,请查看帮助.

如果你想在函数execute中只有代码,就不要用函数声明来包围它.在hello.ps1:

    Write-Host 'Hello, world' 
Run Code Online (Sandbox Code Playgroud)

然后就叫它:

PS C:\temp> .\hello.ps1
Hello, world
Run Code Online (Sandbox Code Playgroud)