@NewDevLab

Поведение аналогичное Out-File?

Как сделать поведение MyFunc аналогичным Out-File?
"str1",
"str2",
"str3" | Out-File -FilePath "test1.txt"

$arr1 = @("str1", "str2", "str3")
Out-File -InputObject $arr1 -FilePath "test2.txt"

"str1",
"str2",
"str3" | MyFunc -FilePath "test3.txt"

@("str1",
"str2",
"str3") | MyFunc -FilePath "test4.txt"

$arr2 = @("str1", "str2", "str3")
MyFunc -InputObject $arr2 -FilePath "test5.txt"

function MyFunc() {
	param (
		[Alias("InputObject")] [parameter(ValueFromPipeline = $true)] [array] $cmds,
		[Alias("FilePath")] [string] $fileName
	)
	$cmds | Out-File $fileName
}


test3.txt и test4.txt выводит только последний элемент массива. Пробовал array, string[], psobject. Передает только последний элемент массива.
  • Вопрос задан
  • 50 просмотров
Решения вопроса 1
@MaxKozlov Куратор тега PowerShell
Если используешь [parameter(ValueFromPipeline = $true)]
необходимо придерживаться соответствующего вида функции для pipeline, а именно - всю обработку делать в блоке PROCESS{} - блок будет в цикле получать всё что попадает на вход из пайпа. блоки BEGIN{} и END{} задействуются, соответственно в самом начале и конце, там значение $cmds доступно не будет
function MyFunc() {
  param (
    [Alias("InputObject")] [parameter(ValueFromPipeline = $true)] [array] $cmds,
    [Alias("FilePath")] [string] $fileName
  )
  BEGIN {}
  PROCESS {
    $cmds | Out-File $fileName} -Append
  }
  END{}
}

в BEGIN{}, возможно, понадобится зачистить файл
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы