dot-source在powergui中失败

时间:2011-08-12 10:50:07

标签: powershell powergui

我正试图在PowerGui 3.0中点源脚本文件,但我得到的只是;


  

术语“。\ PowerShell.Common.ps1”未被识别为a的名称   cmdlet,函数,脚本文件或可操作程序。检查一下   如果包含名称,或者包含路径,请验证路径是否正确   正确,然后再试一次。在   d:\ TFS \的SharePoint \开发\部署\ AutoSPInstaller \ SP2010 \ AutoSPInstaller \ AutoSPInstallerFunctionsCustom.ps1:6   焦炭:31   +。\ PowerShell.Common.ps1<<<<       + CategoryInfo:ObjectNotFound:   (。\ PowerShell.Common.ps1:String)[],CommandNotFoundException       + FullyQualifiedErrorId:CommandNotFoundException


并且powerGui随后在所述文件中不提供我的脚本功能 - 在父脚本的上下文敏感列表中。

文件“PowerShell.Common.ps1”与AutoSPInstallerFunctionsCustom.ps1位于同一目录中 感谢您的帮助

3 个答案:

答案 0 :(得分:5)

要从PowerGUI的命令行对源文件进行点源,请确保当前的工作目录位于脚本的目录中。您可以通过在PowerGUI的命令行键入$PWD来检查这一点。

要从脚本引用另一个脚本,您可以执行此操作:

# Get the current script's directory
$MyDir = Split-Path $MyInvocation.MyCommand.Definition

# Dot-source the external script by using the current script's directory
. "$MyDir\ScriptName.ps1"

获取脚本的目录可确保即使您当前的工作目录与脚本的目录不同,您也可以引用相对于脚本位置的文件。

答案 1 :(得分:4)

@Rynant当然指出问题是您需要引用脚本的目录而不是当前目录。但是,重要的是要注意他的代码解决方案只是部分正确;事实上,是否有效取决于你所称的地方!

这是一个更强大的解决方案:

function Get-ScriptDirectory
{
    Split-Path $script:MyInvocation.MyCommand.Path
}

碰巧,我刚刚写了一篇详细的讨论,分析了在另一个SO问题中正确获取脚本目录的这一点。我不会重复我冗长的答案(包括测试工具和结果矩阵),而是提供this link

答案 2 :(得分:0)

当您从PowerGUI中浏览到正在处理的脚本时,会出现此问题。

您可能更愿意在原位运行脚本,即将$PWD设置为脚本目录,而不是将调用路径更改为其他脚本。通过使用 Windows资源管理器中的右键单击上下文菜单,通过Windows shell在PowerGUI中打开脚本,可以轻松完成此操作。