2012-07-10 33 views

回答

5

我會得到完全擺脫函數調用。您不會丟失命名參數和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" 
+0

正是我在找的東西。這太棒了。 – 2012-07-11 16:10:57

5

默認情況下,該功能招呼只會除非你點源腳本是在腳本範圍訪問。這意味着,腳本一旦退出,它就不再可見。如果你想讓它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 
+1

我結束了在每一個文件的末尾增加了函數的調用。 IE:'hello $ args'。但如果有另一種方式,我仍然很想知道。 – 2012-07-10 20:51:45

+0

@ cable729你不必將你的代碼放在一個函數中。查看我的更新。 – zdan 2012-07-10 22:31:06

+0

另一個不錯的選擇,但是你放棄了命名參數和cmdlet包裝。 – 2012-07-10 23:11:24

相關問題