我有一个保存在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文件(它位于路径中的文件夹中,并且自动完成功能正常工作)
但是,我无法开始使用这些功能。我很困惑,因为当我将这些功能复制/粘贴到控制台时,一切都很好并且可以正常工作。我也有一个在我的个人资料中定义的功能,它的工作原理。我在哪里想错了,为什么它不起作用我想做什么?
答案 0 :(得分:4)
您需要“dot source”该文件。也就是说,而不是:
PS> C:\PathTo\MyScript.ps1
执行脚本(在您的情况下脚本只包含函数但没有使用这些函数的任何内容)但是不保留已定义的函数和变量处于全局状态,您应该这样做:
PS> . C:\PathTo\MyScript.ps1
这会将您的功能“加载”到全局范围内,以便以后使用。
在PowerShell 2.0中,您还可以使用Import-Module将.psm1文件中的脚本作为“模块”加载,以提供更好的重用和部署故事。