Как загрузить переменную из одного скрипта PowerShell в другой? - PullRequest
2 голосов
/ 29 июня 2010

У меня есть основной сценарий, который вызывает несколько других сценариев, и мне нужно загрузить переменные из других сценариев в основной сценарий, чтобы я мог сбросить их в файл HTML.Я пытался использовать точечные источники сценариев, к которым я обращаюсь, но это не сработало или я делаю что-то не так.Любая помощь будет оценена.

Пример раздела сценария:

.\get-cluster.ps1

$MyReport += Get-CustomHeader "Clusters not in compliance : $($CapacityInfo.count) ($MyReport += Get-HTMLTable $capacityinfo
$MyReport += Get-CustomHeaderClose

В сценарии get-cluster.ps1

существует переменная $capacityinfo

Ответы [ 2 ]

5 голосов
/ 29 июня 2010

Если ваш файл get-cluster.ps1 не находится в корневом каталоге, точечный источник будет выглядеть примерно так:

. .\Get-Cluster.ps1

Это выполнит сценарий Get-Cluster.ps1 в той же области, что и вызывающая сторона, сделав его переменные уровня сценария доступными в вызывающей стороне.

3 голосов
/ 29 июня 2010

Dot Sourcing достигнет вашей цели. Однако это неоднозначный дизайн, который противоречит рекомендациям по разработке PowerShell CmdLet. Конечно, вы создаете сценарий, а не командлет, но похоже, что вы пытаетесь следовать соглашениям PowerShell, учитывая имя файла сценария, которое вы выбрали.

Использование глагола Get подразумевает, что вы извлекаете ресурс. Поэтому, если у вас есть скрипт с именем Get-Cluster.ps1, он должен получить один или несколько экземпляров Cluster. Вместо этого рассмотрим следующее:

$clusters = .\Get-Cluster.ps1 -NonCompliantOnly

Это все еще позволит вам установить переменную в вашей текущей области без всякой магии и неоднозначности точечного поиска. Я не пытаюсь быть проповедуемым, но команда PowerShell проделала хорошую работу по созданию согласованности, и я думаю, что попытка увековечить это, когда мы расширяем PowerShell с помощью наших собственных скриптов / модулей / командлетов, имеет большое значение. Если вы не можете установить новую или существующую переменную в текущей области, используя точечный источник, я бы посоветовал вам найти новый глагол.

См. Глаголы командлета на MSDN для получения дополнительной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...