如果我在文件中只有一個名稱與該文件相同的函數,這可能嗎?我似乎記得以前閱讀過它。事情是這樣的:在沒有點源的文件中調用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