如果我在文件中只有一个名称与该文件相同的函数,这可能吗?我似乎记得以前阅读过它。事情是这样的:在没有点源的文件中调用powershell函数
hello.ps1
function hello {
Write-Host 'Hello, world'
}
如果我在文件中只有一个名称与该文件相同的函数,这可能吗?我似乎记得以前阅读过它。事情是这样的:在没有点源的文件中调用powershell函数
hello.ps1
function hello {
Write-Host 'Hello, world'
}
我会得到完全摆脱函数调用。您不会丢失命名参数和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"
默认情况下,该功能招呼只会除非你点源脚本是在脚本范围访问。这意味着,脚本一旦退出,它就不再可见。如果你想让它hello.ps1外提供不点采购,可以在全局范围内声明函数:
function global:hello {
Write-Host 'Hello, world'
}
然后,你可以执行该脚本,然后调用函数:
PS C:\temp> .\hello.ps1
PS C:\temp> hello
Hello, world
有关PowerShell范围的更多信息,check out the help。
如果你只想让函数中的代码执行,就不要用函数声明来包围它。在hello.ps1
:
Write-Host 'Hello, world'
然后叫它:
PS C:\temp> .\hello.ps1
Hello, world
我结束了在每一个文件的末尾增加了函数的调用。 IE:'hello $ args'。但如果有另一种方式,我仍然很想知道。 – 2012-07-10 20:51:45
@ cable729你不必将你的代码放在一个函数中。查看我的更新。 – zdan 2012-07-10 22:31:06
另一个不错的选择,但是你放弃了命名参数和cmdlet包装。 – 2012-07-10 23:11:24
正是我在找的东西。这太棒了。 – 2012-07-11 16:10:57