我有一个powershell脚本,可以在某些远程服务器上收集一些文件信息。 写入控制台时,我看到结果很好,但它们似乎没有被写入指定的文件:
out-file -filepath $filepath -inputobject $date -force -encoding ASCII -width 50
ForEach($server in $serverLists)
{
$result += $server
$result += $break
ForEach($filePath in $filePaths)
{
$result += $filePath
$result += $break
$command = "forfiles /P " + $filePath + " /S /D -1 > C:\temp\result.txt"
$cmd = "cmd /c $command"
Invoke-WmiMethod -class Win32_process -name Create -ArgumentList $cmd -ComputerName $server
sleep 2
$result += Get-Content \\$server\C$\temp\result.txt
$result += $break
$result += $break
write-host $result
#out-file -filepath $filepath -Append -inputobject $result -encoding ASCII -width 200
Remove-Item \\$server\C$\temp\result.txt
}
$result += $break
}
out-file -filepath $filepath -Append -inputobject $result -encoding ASCII -width 200
答案 0 :(得分:2)
您在两个地方使用相同的变量$filepath
:作为foreach
循环的循环变量和循环外部。循环结束后,foreach
循环不会恢复循环变量的值。因此,在循环结束后,循环变量将具有循环或值的最后一个值,其中循环被break
命令中断。如果您不希望foreach
循环覆盖变量值,则应为循环变量选择不同的名称。