我编写了一个脚本但无法将其导出为CSV或以任何方式输出。
PowerShell不喜欢foreach
循环和导出。
对于.txt文件中的每个“folderpath / filename”,它会检查文件是否仍然存在并输出true或false + folderpath / file name。
脚本工作正常,只是无法将事物导出为CSV。
任何想法我做错了什么?
foreach ($WantFile in Get-Content "C:\scripts\folderpaths.txt") {
$FileExists = Test-Path $WantFile
if ($FileExists -eq $True) {
Write-Output $wantfile "True"
} else {
Write-Output $wantfile "False"
}
} | Export-Csv C:\scripts\output.csv -noType
答案 0 :(得分:3)
将您的代码更改为:
Get-Content 'C:\scripts\folderpaths.txt' | % {
if (Test-Path -LiteralPath $_) {
Write-Output $_ "True"
} else {
Write-Output $_ "False"
}
} | Export-Csv 'C:\scripts\output.csv' -NoType
我怀疑生成的文件是否包含您所期望的内容。 Export-Csv
导出对象的属性。您生成的输出是字符串对象(实际上每个Write-Output
语句为2),它们的唯一属性是Length
,因此您的结果将是一列,其中包含您回显的字符串的长度。
要创建一个包含2列的CSV,一列用于路径,另一列用于创建具有所需属性的对象所需的路径,例如像这样:
Get-Content 'C:\scripts\folderpaths.txt' `
| select @{n='Path';e={$_}}, @{n='Exists';e={Test-Path -LiteralPath $_}} `
| Export-Csv 'C:\scripts\output.csv' -NoType
答案 1 :(得分:1)
关于原始问题(将foreach循环的输出导出为CSV),您可以通过将其包装在子表达式中将该输出输出到管道,但这不会解决脚本中的其他问题到了你想要出口的东西:
$(ForEach ($WantFile in Get-Content "C:\scripts\folderpaths.txt"){
$FileExists = Test-Path $WantFile
If ($FileExists -eq $True) {Write-Output $wantfile "True"}
Else {Write-Output $wantfile "False"}
})| export-csv C:\scripts\output.csv -noType
答案 2 :(得分:1)
我遇到了同样的问题,我按照以下方式完成了工作。
$forloop = foreach ( $i in $computers)
{
$i
$out = .\psexec.exe \\$i C:\hp\hpsmh\bin\smhlogreader.exe --version
$out
}
$forloop | Out-file C:\scripts\output.txt -Append