Использование глобальных переменных в ps1 - PullRequest
0 голосов
/ 13 февраля 2019

Не могу найти достаточно хорошего решения моей проблемы.Есть ли хороший способ группировки переменных в каком-либо файле, чтобы к ним могли обращаться несколько сценариев?

Я выполнял некоторую работу с Конфигурацией требуемого состояния, но работа, которую необходимо выполнить, не может быть эффективно реализованасюда.Смысл заключается в том, чтобы установить агент сборки Azure на сервер, а затем настроить его.Существуют некоторые переменные, которые на самом деле не должны находиться внутри файла скрипта, просто копируемого как личный токен доступа.Я просто хочу иметь возможность легко изменить его без необходимости заходить в каждый скрипт, который будет его использовать.В DSC вы можете просто создать файл .psd1 и получить доступ к переменным, как, например, AllNodes.NodeName.Вызов и параметры файла конфигурации выглядят следующим образом:

.\config.cmd --unattended --url $myUrl --auth PAT --token $myToken --pool default --agent "$env:COMPUTERNAME" --acceptTeeEula --work $workDir'

Я хочу сделать переменную $ myToken доступной из внешнего файла для большей безопасности и наличия централизованного места, откуда я могу изменять значения.$ myUrl также важно иметь доступ к нему, так как он меняется с новым обновлением для Build Agent.

Заранее благодарим вас за ваши усилия.Если что-то не понятно, пожалуйста, дайте мне знать.

Ответы [ 2 ]

0 голосов
/ 15 февраля 2019

Спасибо за помощь.В некоторых случаях это очень полезные решения, но я выкопал немного глубже и нашел решение, которое соответствует моей цели.В основном, если у вас есть файл psd1, подходящий для использования DSC, вы также можете получить доступ к его содержимому через обычный файл ps1.Например:

NonNodeData = 
@{
    Pat = 'somePAT'
}

Допустим, этот раздел файла psd1 с именем ENV.psd1 находится на вашем локальном компьютере в C: / Configuration

. Для доступа к содержимому этого файла вам необходимо:создайте переменную внутри вашего скрипта и используйте Import-PowerShellDataFile, например, так:

$configData = Import-PowerShellDataFile -Path "C:\Configuration\ENV.psd1"

И теперь вы можете использовать все, что хранится в ENV.psd1.Например, если я хочу извлечь свой PAT из файла конфигурации, чтобы иметь возможность сохранить его в переменной в сценарии:

$myPat = $configData.NonNodeData.Pat

Благодаря этому я могу просто передать $ myPat в качестве параметра при вызове config.cmd примерно так:

.\config.cmd --unattended --auth PAT --token $myPat

Сохранение моего кода чистым и легким для любых будущих обновлений.

0 голосов
/ 13 февраля 2019

У меня есть два очень разных ответа на ваш вопрос, хотя любой из них может пропустить вашу точку зрения.

Во-первых, в сценарии вашего профиля можно определить правдоподобия.Большинство людей используют скрипт профиля только для определения библиотеки функций или классов.Но переменную можно сделать глобальной так же.

У меня есть переменная с именем $ myps, которая определяет папку, в которой я храню свои сценарии PS (в подпапках).

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

Второй способ заключается в сохранении значений переменных в файле CSV, в то время как имена хранятся в заголовке CSV.маленький командлет, который проходит по CSV-файлу, запись за записью, каждый раз генерируя различные расширения шаблона.

Эти значения не совсем глобальны, но их можно использовать в нескольких контекстах.

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