5

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

你好.ps1

function hello {
    Write-Host 'Hello, world'
}
4

2 回答 2

6

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

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

变成:

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

你可以这样:

> .hello.ps1 "World"
于 2012-07-10T23:34:39.533 回答
5

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

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

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

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

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

如果您只想让函数中的代码执行,请不要用函数声明包围它。在hello.ps1

    Write-Host 'Hello, world' 

然后调用它:

PS C:\temp> .\hello.ps1
Hello, world
于 2012-07-10T20:12:56.993 回答