输出到日志文件失败,但 PS6 脚本运行没有错误

Outputting to log file fails, but PS6 script runs with no errors

我有其他导出 csv 文件的软件,当一切正常运行时,我在 csv 中有 1291 行。我试图轻松识别哪些文件不完整。

这是我第一次尝试使用 PowerShell。我修改了在 Whosebug 上找到的这段代码:

$files = Get-ChildItem 'd:\*.txt'

ForEach ($file in $files) {
    $lineCount = Get-Content -LiteralPath $file | Measure-Object | Select-Object -ExpandProperty Count
    Write-Output "File $($file.Name) has $lineCount lines"
    if ($lineCount -gt 50) {
        Write-Warning "Warning $($file.Name) is too big"
    }
}

并设法做到这一点而没有出现错误:

$files = Get-ChildItem 'D:\!__DATA for searches\__CSVs\*.csv'

$logfile = 'D:\!__DATA for searches\__CSVs\CompletedFiles.txt'

ForEach ($file in $files) {
    $lineCount = Get-Content -LiteralPath $file | Measure-Object | Select-Object -ExpandProperty Count
    Write-Output "File $($file.Name) has $lineCount lines"
    if ($lineCount -gt 1290) {
        Write-Warning "Warning $($file.Name) is completed"   | Out-File $logfile -Append
    } 
}

还有这个变体

$files = Get-ChildItem 'D:\!__DATA for searches\__CSVs\*.csv'

ForEach ($file in $files) {
    $lineCount = Get-Content -LiteralPath $file | Measure-Object | Select-Object -ExpandProperty Count
    Write-Output "File $($file.Name) has $lineCount lines"
    if ($lineCount -gt 1290) {
        Write-Warning "Warning $($file.Name) is completed"  | Out-File 'D:\!__DATA for searches\__CSVs\CompletedFiles.txt' -append
   } 
}

但都没有写入日志文件。该脚本在 PS6 控制台中运行良好,用 1291 行识别文件。

所以我需要日志文件,而且我还想将完成的文件移动到同一脚本中的另一个目录,因此非常感谢在 what/where 上输入以实现这一点。

感谢回答和其他研究,我完成了脚本

$files = Get-ChildItem 'D:\!__DATA for searches\__CSVs\*.csv'
$logfile = 'D:\!__DATA for searches\__CSVs\CompletedFiles.txt'

ForEach ($file in $files) {
    $lineCount = Get-Content -LiteralPath $file | Measure-Object | Select-Object -ExpandProperty Count
#    Write-Output "File $($file.Name) has $lineCount lines"
    if ($lineCount -gt 1290) {
#        Write-Warning "Warning $($file.Name) is completed" 3>&1 |Out-File $logfile -Append
    Write-Output  "File $($file.Name) has $lineCount lines, and moving to D:\Completed\" 3>&1 | Out-File $logfile -Append
     Move-Item "D:\!__DATA for searches\__CSVs$($file.Name)" "D:\!__DATA for searches\Completed\" -Force
   } 
}

Write-Warning 没有向 stdout 发送任何内容。

您可以使用类似于 cmd:

的语法重定向警告流
Write-Warning "Warning $($file.Name) is completed" 3>> $logfile

Write-Warning "Warning $($file.Name) is completed" 3>&1 |Out-File $logfile -Append