2010-03-21 52 views
1

我保存在PS1文件的腳本中,我定義2個功能,例如:我PowerShell的功能似乎並沒有被登記

function Invoke-Sql([string]$query) { 
    Invoke-Sqlcmd -ServerInstance $Server -Database $DB -User $User -Password $Password -Query $query 
} 

function Get-Queued { 
    Invoke-Sql "Select * From Comment where AwaitsModeration = 1" 
} 

在PowerShell控制檯然後我通過鍵入調用PS1文件(它位於路徑中的文件夾中,並且自動完成工作)

但是,我無法開始使用這些功能。我很困惑,因爲當我複製/粘貼到控制檯的功能,一切都很好,他們的工作。我也有一個在我的個人資料中定義的功能,它的工作原理。我在哪裏錯誤地思考,爲什麼它不能解決我想要做的事情?

回答

4

你需要「dot source」這個文件。也就是說代替:

PS> C:\PathTo\MyScript.ps1 

執行該腳本(在你的情況下,腳本只包含了這些功能,但使用這些函數沒有),但不會保留在全局狀態定義的函數和變量,而應該這樣做:

PS> . C:\PathTo\MyScript.ps1 

這會將您的函數「加載」到全局範圍中,以便稍後使用它們。

在PowerShell 2.0中,您還可以使用Import-Module將.psm1文件中的腳本作爲「模塊」加載,從而提供更好的重用和部署故事。

+0

就是這樣,thx! – flq 2010-03-21 20:44:37