我的PowerShell功能似乎没有注册

时间:2010-03-21 18:24:14

标签: powershell

我有一个保存在ps1文件中的脚本,我在其中定义了2个函数:

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文件(它位于路径中的文件夹中,并且自动完成功能正常工作)

但是,我无法开始使用这些功能。我很困惑,因为当我将这些功能复制/粘贴到控制台时,一切都很好并且可以正常工作。我也有一个在我的个人资料中定义的功能,它的工作原理。我在哪里想错了,为什么它不起作用我想做什么?

1 个答案:

答案 0 :(得分:4)

您需要“dot source”该文件。也就是说,而不是:

PS> C:\PathTo\MyScript.ps1

执行脚本(在您的情况下脚本只包含函数但没有使用这些函数的任何内容)但是不保留已定义的函数和变量处于全局状态,您应该这样做:

PS> . C:\PathTo\MyScript.ps1

这会将您的功能“加载”到全局范围内,以便以后使用。

在PowerShell 2.0中,您还可以使用Import-Module将.psm1文件中的脚本作为“模块”加载,以提供更好的重用和部署故事。