точечный источник не работает - PullRequest
2 голосов
/ 12 августа 2011

Я пытаюсь создать точечный источник файла сценария в PowerGui 3.0, но все, что я получаю, это:


Термин '. \ PowerShell.Common.ps1' не распознанкак имя командлета, функции, файла сценария или работающей программы.Проверьте правильность написания имени или, если путь был включен, проверьте правильность пути и повторите попытку.В 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 </p>


И впоследствии powerGui не предлагает мою функцию скрипта в указанном файле - в контекстно-зависимом списке в родительском скрипте.

файл "PowerShell.Common.ps1" находится в том же каталоге, что и AutoSPInstallerFunctionsCustom.ps1. Спасибо за помощь

Ответы [ 3 ]

5 голосов
/ 12 августа 2011

Чтобы получить точечный источник файла из командной строки 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"

Получение каталога скрипта гарантирует, что даже если ваштекущий рабочий каталог не совпадает с каталогом скрипта, вы сможете ссылаться на файлы относительно местоположения скрипта.

4 голосов
/ 13 августа 2011

@ Rynant, безусловно, прав, указав, что проблема в том, что вам нужно ссылаться на каталог скрипта, а не на текущий каталог.Однако важно отметить, что его кодовое решение является лишь частично правильным;на самом деле, работает ли он, зависит от того, где вы его называете

Более надежное решение таково:

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

Как это случилось, я только что написал подробныйобсуждение, анализирующее именно эту точку правильного получения каталога скриптов в другом вопросе SO.Вместо того, чтобы повторять мой длинный ответ (вместе с тестовой машиной и таблицей результатов), я предоставлю эту ссылку .

0 голосов
/ 03 июля 2015

Эта проблема возникает при переходе к сценарию, над которым вы работаете, из PowerGUI.

Вместо изменения путей вызова для других сценариев, вы можете предпочесть запускать сценарий на месте, т.е.1003 * установить в каталог скрипта.Это проще всего сделать, открыв скрипт в PowerGUI через оболочку Windows, используя контекстное меню, щелкнув правой кнопкой мыши в Проводник Windows .

...