1

我面临的问题是将在 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
4

2 回答 2

0

Microsoft 文档上的about_redirection有相当多的信息。

您遇到的问题之一是您正在尝试重定向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哪些也可能可用。

于 2019-02-20T11:50:26.803 回答
0

要创建一个文件,您可以这样做:($outcome作为包含该函数结果的变量)

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

或者

$outcome > 'file.txt'

如果已经有一个文件并且您想追加:

$outcome | Add-Content 'file.txt'
于 2019-02-20T10:12:28.200 回答