2015-11-01 53 views
0

我有一个powershell脚本,它收集某些远程服务器上的某些文件信息。 当写入控制台,我看到的结果不错,但他们似乎并不被获取写入到指定了文件:Powershell Out-file不起作用

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

您正在使用哪个版本的PowerShell? – Leptonator

+1

使用'$ filepath'作为内部'foreach'循环的循环变量。你也可以在foreach循环之前使用'$ filepath'变量。它应该是两个不同名称的变量吗? – PetSerAl

+0

@PetSerAl,这是问题(我认为变量是区分大小写的) 请作出回应,以便我可以将其标记为正确的答案。 –

回答

2

您变量在两个地方$filepath使用相同的:作为循环变量为foreach循环和循环外部。 foreach循环在循环结束后不会恢复循环变量的值。因此,在循环结束之后,循环变量将具有循环或值的最后值,其中循环被break命令中断。如果您不希望变量值被foreach循环覆盖,则应为循环变量选择不同的名称。