2016-09-16 86 views
2

我試圖打印一個數組(我試圖用for循環和直接與.ToString()),但我總是得到一個System.Object輸出。在Powershell中打印數組

數組的內容是這個命令的結果:

$singleOutput = Invoke-Command -ComputerName $server -ScriptBlock { 
    Get-ChildItem C:\*.txt -Recurse | 
     Select-String -Pattern "password" -AllMatches 
} 

這是我得到的輸出:

System.Object[]

我缺少什麼?

編輯:

這是整個功能:

foreach ($server in $servidores) { 
    $result = @() 
    Write-Output ("---Searching on Server:---" + $server + "----at:" + 
     (Get-Date).ToString() + "----") 
    $singleOutput = Invoke-Command -ComputerName $server -ScriptBlock { 
     Get-ChildItem C:\*.txt -Recurse | 
      Select-String -Pattern "password" -AllMatches 
    } 
    $result += $singleOutput 

    Write-Host $result.ToString() 
} 
Read-Host -Prompt "Press Enter to exit" 

我也試圖與:

foreach ($i in $result) { 
    $result[$i].ToString() 
} 
+0

這是一組對象,沒事。你爲什麼用'tostring()'打印?你想要什麼輸出?你是寫對象還是寫主機? – TessellatingHeckler

+0

然後我添加$ result + = $ singleOutput(聲明的第一個$ result = @()) –

+0

我正在使用寫主機 –

回答

9

您使用Select-String,產生MatchInfo對象。由於它看起來像要從文件中匹配整行,因此您應該只返回MatchInfo對象的Line屬性的值。另外,你的數組處理太複雜了。只需輸出任何Invoke-Command返回並捕獲變量中的循環輸出。對於循環內部的狀態輸出,使用Write-Host,以便在$result中不會捕獲消息。

$result = foreach ($server in $servidores) { 
    Write-Host ("--- Searching on Server: $server at: " + (Get-Date).ToString()) 
    Invoke-Command -ComputerName $server -ScriptBlock { 
     Get-ChildItem C:\*.txt -Recurse | 
      Select-String -Pattern "password" -AllMatches | 
      Select-Object -Expand Line 
    } 
} 

如果您還需要的主機名,你可以用calculated property添加它,並返回自定義對象:

$result = foreach ($server in $servidores) { 
    Write-Host ("--- Searching on Server: $server at: " + (Get-Date).ToString()) 
    Invoke-Command -ComputerName $server -ScriptBlock { 
     Get-ChildItem C:\*.txt -Recurse | 
      Select-String -Pattern "password" -AllMatches | 
      Select-Object @{n='Server';e={$env:COMPUTERNAME}},Line 
    } 
} 

您輸出數組通過echo數組變量:

PS C:\>$result 
Server Line 
------ ---- 
...  ...

要獲得自定義格式的輸出,您可以使用例如format operator-f):

$result | ForEach-Object { 
    '{0}: {1}' -f $_.Server, $_.Line 
} 
+2

**看過5000次,但1 upvote ...?**得到開玩笑的人。分享愛。 –

+1

已觀看10,000次只有7個投票...看起來不像這樣Q/A變得很好信息轉換 – GoldBishop