Использование файла ответов со скриптом PowerShell - PullRequest
2 голосов
/ 11 июля 2011

У меня есть сценарий PowerShell с несколькими «params» в начале:

param(
    [switch] $whatif,
    [string] $importPath = $(Read-Host "Full path to import tool"),
    [string] $siteUrl = $(Read-Host "Enter URL to create or update"),
    [int] $importCount = $(Read-Host "Import number")
)

Можно ли как-нибудь запустить это для файла ответов, чтобы избежать ввода значений параметров каждый раз?

Ответы [ 4 ]

5 голосов
/ 11 июля 2011

Я не понимаю причину вопроса.Все, что вам нужно сделать для вызова вашего скрипта, это что-то вроде:

.\script.ps1 -whatif -importPath import_path -siteUrl google.com -importCount 1

Read-Host существуют как значения по умолчанию, которые должны быть выполнены (а затем прочитаны и назначены значения для параметров), только если вы нене указывайте значения.Пока у вас есть вышеуказанная команда (сохраненная в файле, чтобы вы могли копировать и вставлять в консоль или запускать из другого скрипта или чего-либо еще), вам не нужно вводить значения снова и снова.

4 голосов
/ 12 июля 2011

Начните с установки функции или сценария для приема входных данных конвейера.

[CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='Low')]
param(
  [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True)]
  [string] $importPath,

  [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True)]
  [string] $siteUrl,

  [Parameter(Mandatory=$True,ValueFromPipelineByPropertyName=$True)]
  [int] $importCount
)

Обратите внимание, что я удалил созданный вручную -whatif. Не нужно - я доберусь до этого через секунду. Также обратите внимание, что Mandatory = $ True заставит PowerShell запрашивать значение, если оно не предоставлено, поэтому я удалил ваш Read-Host.

Учитывая вышеизложенное, вы можете создать «файл ответов», который представляет собой файл CSV. Создайте столбец importPath, столбец siteURL и столбец importCount в файле CSV:

importPath,siteURL,importCount
"data","data",1
"x","y",2

Тогда сделайте это:

Import-CSV my-csv-file.csv | ./My-Script

Конечно, если ваш сценарий - My-Script.ps1.

Теперь, чтобы-whatif. В теле вашего скрипта сделайте это:

if ($pscmdlet.shouldprocess($target)) {
  # do whatever your action is here
}

Это предполагает, что вы делаете что-то для $ target, это может быть путь, имя компьютера, URL или что-то еще. Это то, что вы изменяете в своем скрипте. Поместите ваши действия / команды модификации в конструкцию if. Это, наряду с объявлением SupportsShouldProcess () в верхней части скрипта, включит поддержку -whatif и -confirm. Вам не нужно кодировать эти параметры самостоятельно.

То, что вы создаете, называется «расширенной функцией» или, если это просто сценарий, то, я думаю, это будет «расширенный сценарий». Использование входных параметров конвейера таким способом - это «способ работы PowerShell».

0 голосов
/ 11 июля 2011

Следуя указаниям Джоэла, вы можете установить другой набор параметров, основанный на ключе -answerfile.

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

Мэтт

0 голосов
/ 11 июля 2011

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

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

Необязательные параметры . Или вы можете изменить параметры, чтобы использовать значения по умолчанию, которые указывают, что параметры не были переданы, а затем проверить файл с определенным именем для чтения значений. Если файл не найден, запросите значения.

Если формат файла ответов является гибким (т. Е. Вы собираетесь использовать его только с этим сценарием Powershell), вы можете значительно приблизиться к поведению реального файла ответов, написав его как Powershell. сам скрипт и дотсорсинг.

if (test-path 'myAnswerfile'){
    . 'myAnswerFile'
    #process whatever was sourced from the answer file, if necessary
} else {
    #prompt for values
}

Это все еще требует удаления вызовов Read-Host из parameters скрипта.

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