что является обычным способом предоставления информации о конфигурации пользовательскому командлету Powershell - PullRequest
3 голосов
/ 11 марта 2011

Учитывая, что пользовательские командлеты PS являются сборками, я не могу предоставить им информацию о конфигурации через обычный маршрут App.config. Какой обычный способ предоставления информации о конфигурации пользовательскому командлету?

Ответы [ 2 ]

1 голос
/ 30 января 2015

PowerShell - это оболочка.Обычным способом передачи информации между частями оболочки являются переменные оболочки.Для powershell это будет выглядеть следующим образом:

$global:MyComponent_MySetting = '12'
# i.e. 
$PSDefaultParameterValues
$ErrorActionPreference

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

$env:PATH
$env:PSModulePath

Если вы думаете, что это анти-паттерн для .NET, вы можете пересмотреть.Это норма для приложений, размещаемых PAAS, и она станет новым значением по умолчанию для ASP.NET, работающего на оптимизированной для сервера среде CLR (ASP.NET v5).

См. https://github.com/JabbR/JabbRv2/blob/dev/src/JabbR/Startup.cs#L21
Примечание: на момент написания статьи я ссылаюсь на .AddEnvironmentVariables()

Я несколько раз возвращался к этому вопросу, в том числе задавал его сам,Я хотел сделать ставку на то, чтобы сказать, что PowerShell не работает с <appSettings>.ИМО, в этом отношении гораздо лучше охватить аспект оболочки PS, чем аспект .NET.

Если вам нужна сложная конфигурация, возьмите строку JSON.POSH v3 + имеет ConvertFrom-JSON встроенный.Если все в вашем процессе использует одну и ту же сложную конфигурацию, поместите ее в файл .json и укажите на этот файл из переменной среды.

Если одного файла недостаточно, существуют хорошо зарекомендовавшие себя решения, такие как шаблон PATH, GIT .gitignore или ASP.NET web.config разрешение (которое я не буду повторять здесь).

1 голос
/ 10 января 2015

Обычно я бы предложил просто использовать параметры для передачи данных.

Get-MyData -connectionstring $connectionString -table Test ...

Если это нецелесообразно (слишком много параметров и т. Д.), Тогда вы всегда можете указать путь к файлу конфигурации с помощьюпараметр:

Get-MyData -Config .\My.config

Затем вы можете прочитать указанный файл конфигурации из командлета.

Это позволяет пользователям командлета определять свои собственные файлы конфигурации для использования.

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