如何将每个处理项输出到文件?

时间:2018-02-18 02:05:42

标签: powershell

Get-AppXPackage -AllUsers | Foreach {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)\AppXManifest.xml"} | Out-File -path $env:temp\AppXPackage.log

执行我希望它执行的任务。但是,日志文件为空。

我希望日志文件包含这两个错误,并记录各个操作。

3 个答案:

答案 0 :(得分:0)

我不熟悉那个特定的cmdlet,你可能会尝试将其他输出流(所以不是stdout)重定向到日志文件,它可能会起作用。在最糟糕的情况下,你可以做这样的事情:

Foreach-Object {
   try {
        Add-AppxPackage ... -ErrorAction Stop
        "$_ done" > success.log
    } catch {
        $_ > errors.log
    }
}

答案 1 :(得分:0)

Add-AppxPackage不返回任何内容,也不支持-PassThru参数。但是,您可以将$_对象从foreach块推送到管道:

Get-AppXPackage -AllUsers |
    Foreach {Add-AppxPackage -DisableDevelopmentMode -Register 
    "$($_.InstallLocation)\AppXManifest.xml"; $_ } |
         Out-File -path $env:temp\AppXPackage.log

答案 2 :(得分:0)

正如提到的其他2个答案,该cmdlet似乎没有给出任何输出。这使您无法使用manual loggingredirection。我只是想扩展其他两个,给你几个选项。

对于重定向,您可以执行以下操作:

.\my_script *>> myfile.log #appen all streams (output and errors) to a file
.\my_script >> output.log 2>> errors.log #send output to one file and error stream to another

对于正常日志记录,请查看$error,其中包含会话中的所有错误。您可以使用$error.clear()启动脚本,手动记录所需的输出,因为cmdlet没有输出,然后以$error | out-file errors.log结束