我正试图在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位于同一目录中 感谢您的帮助
答案 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中打开脚本,可以轻松完成此操作。