Проблема с журналированием для вызова функции в powershell-workflow - PullRequest
0 голосов
/ 20 февраля 2019

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

Пробовал использовать Out-File, но он не должен использоваться для регистрации вызова определенной функции.

Любая помощь в этом была бы полезна.Заранее спасибо.

Прилагается пример сценария, касающегося проблемы:

function test1{
    param (
    [String] $FileName)
    Write-Host "$FileName test1"
}

WorkFlow Sample { 
    $Files = Get-ChildItem 'C:\Users\Downloads\testDir' 
    Foreach -parallel ( $File in $Files ) {
        test1($File) #This function output should be logged
    }  
}

Sample

Ответы [ 2 ]

0 голосов
/ 20 февраля 2019

about_redirection в документах Microsoft содержит довольно мало информации.

Одна из проблем, с которой вы столкнулись, заключается в том, что вы пытаетесь перенаправить Write-Host.В зависимости от версии PowerShell у вас может быть доступно больше или меньше опций.До версии 5 вам приходилось использовать что-то вроде *> или Tee-Object, где это применимо.С версией 5 доступны некоторые новые опции:

Начиная с Windows PowerShell 5.0, Write-Host является оболочкой для Write-Information Это позволяет использовать Write-Host для передачи вывода информациипоток.Это позволяет захватывать или подавлять данные, записанные с использованием Write-Host, при сохранении обратной совместимости.

Переменная предпочтения $InformationPreference и общий параметр InformationAction не влияют на сообщения Write-Host.Исключением из этого правила является -InformationAction Ignore, которое эффективно подавляет вывод Write-Host.(см. «Пример 5»)

Простой вариант - использовать Write-Output вместо Write-Host.Вы не сможете раскрасить его (легко), но в текущем примере вам это не нужно.Кроме того, в зависимости от вашего варианта использования вы можете использовать Start-Transcript, который также может быть доступен.

0 голосов
/ 20 февраля 2019

Чтобы создать файл, вы можете сделать это: ($outcome - переменная, содержащая результат этой функции)

$outcome | Set-Content 'file.txt'`

или

$outcome > 'file.txt'

Если уже естьфайл и вы хотите добавить:

$outcome | Add-Content 'file.txt'
...