Как мне написать скрипт powershell, который можно запускать для обработки как одного файла, так и нескольких файлов - PullRequest
0 голосов
/ 29 сентября 2018

Я создал скрипт powershell, который имеет цикл Foreach-Object, который форматирует XML-файлы, расположенные в InputFolder.(Format-XML - это функция)

Get-ChildItem C:\InputFolder -Filter *.xml | 
Foreach-Object {
        cat $_.FullName | Format-XML    
}

Сейчас мы находимся на другой фазе проекта, где мы не хотим запускать его для всех файлов, а только для одного нового файла, который приходит.

Как создать сценарий powershell, который может принимать одно имя файла в качестве входных данных и в другое время вызываться таким образом, чтобы он также мог обрабатывать несколько файлов при необходимости?

Ответы [ 2 ]

0 голосов
/ 29 сентября 2018

Вам потребуется использовать параметр для скрипта, чтобы вы могли указать, что вы хотите, чтобы он обрабатывал.Что-то вроде:

Param(
    $Path
)
Get-ChildItem $Path -Filter *.xml | 
Foreach-Object {
        cat $_.FullName | Format-XML    
}

Затем вы можете вызвать скрипт как:

.\FormatXMLFiles.ps1 'C:\InputFolder'

, который будет обрабатывать всю папку, или

.\FormatXMLFiles.ps1 'C:\InputFolder\MyFile.xml'

, который будет делать толькоэтот один файл.

0 голосов
/ 29 сентября 2018

Установите свойство ValueFromPipeline в атрибуте Parameter для аргумента функции.

Пример:

function foo
{
    [CmdletBinding()]
    param( [Parameter( Mandatory = $true,
                       Position = 0,
                       ValueFromPipeline = $true )]
           [string] $File
         )

    process
    {
        Write-Host "The file is: $File"
    }
}

Использование:

PS C:\Users\me> 'a', 'b' | foo
The file is: a
The file is: b

PS C:\Users\me> foo -File 'a'
The file is: a
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...