2015-11-01 89 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循環覆蓋,則應爲循環變量選擇不同的名稱。