Начните с установки функции или сценария для приема входных данных конвейера.
[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».