2

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


术语“.\PowerShell.Common.ps1”未被识别为 cmdlet、函数、脚本文件或可运行程序的名称。检查名称的拼写,或者如果包含路径,请验证路径是否正确并重试。在 D:\TFS\SharePoint\Dev\Deploy\AutoSPInstaller\SP2010\AutoSPInstaller\AutoSPInstallerFunctionsCustom.ps1:6 char:31 + .\PowerShell.Common.ps1 <<<< + CategoryInfo : ObjectNotFound: (.\PowerShell.Common. ps1:String) [], CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundException


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

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

4

3 回答 3

5

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

要从脚本中引用另一个脚本,您可以这样做:

# 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"

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

于 2011-08-12T12:46:14.093 回答
4

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

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

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

碰巧的是,我刚刚写了一个详细的讨论,分析了在另一个 SO 问题中正确获取脚本目录的这一点。我将提供此链接,而不是重复我冗长的答案(完整的测试车辆和结果矩阵)。

于 2011-08-13T14:37:57.180 回答
0

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

与其将调用路径更改为其他脚本,您可能更愿意在原位运行脚本,即$PWD设置为脚本的目录。这很容易通过使用Windows Explorer中的右键单击上下文菜单通过 Windows shell 打开 PowerGUI 中的脚本来完成。

于 2015-07-02T23:32:05.477 回答