2016-09-15 50 views
0

想法是使用Select-String和Invoke-Command在多個服務器上搜索模式。如何使用Powershell遠程選擇幾個服務器

我無法正確地將$結果返回到本地服務器,並將其打印到文件和/或控制檯中(這並不重要)。

我需要的是能夠看到的搜索結果(文件名,行,匹配)

Set Execution-Policy RemoteSigned 
$servidores = Get-Content "C:\ServerList.txt" 
(Get-Date).ToString() 

Write-Output "----------------Running script------------------" 
Write-Output "---------------Servers in scope :---------------" 
Write-Output $servidores 
Write-Output "-----------------Starting Loop-----------------" 

$ToExecute = { 
Select-String -SimpleMatch "password" -Path C:\*.* -Exclude C:\Users\Public\resultados.txt 
} 


foreach ($server in $servidores){ 
$result = Invoke-Command -ComputerName $server -ScriptBlock $ToExecute 
Write-Output "----------Executing Search on Server:-----------" 
(Get-Date).ToString();$server; 
Write-Output "------------------------------------------------" 
Write-Output $result 
Out-File $result C:\Users\Public\resultados.txt 
} 
+0

你有兩個不同的問題在這裏。你應該選擇其中一個並關注它。有人可能會知道如何回答,但可能不願回答。問題應該單一併明確界定。 – Matt

+0

好 - 謝謝你的建議 - 我會改正它。 –

+0

請不要更新問題中的代碼。這會讓讀者更難理解發生了什麼。 – Matt

回答

2

對於出文件,如果你不是管道,你需要使用-inputobject旗。由於Out-File does not take the inputobject by position.

Out-File -InputObject $result -path C:\Users\Public\resultados.txt 

否則,你可以使用三通對象來代替寫輸出/ OUTFILE。

$result | Tee -filepath C:\Users\Public\resultados.txt 
0
Set Execution-Policy RemoteSigned 
$servidores = Get-Content "C:\ServerList.txt" 
Write-Output ("----------------Running script-----"+(Get-Date).ToString()+"-- -----------") 
Write-Output "--------------------------Servers in scope----------------------------" 
Write-Output $servidores 
foreach ($server in $servidores){ 
Write-Output ("---Executing Search on Server:---"+$server+"----at:"+(Get- Date).ToString()+"-------------") 
$result= Invoke-Command -ComputerName $server -ScriptBlock {Select-String - Pattern "password" -Path C:\*.txt -AllMatches} 
if ($result -ne $null){ 
Write-Output $result.ToString() 
} 
}Read-Host -Prompt "Press Enter to exit" 
+0

它只適用於一個結果壽 - 試圖提出更好的問題 –

相關問題