2016-09-16 2 views
2

배열을 인쇄하려고합니다 (for 루프와 함께 직접 시도하고 .ToString()과 직접 시도했습니다), 그러나 나는 항상 System.Object 출력을 얻습니다. 나는 무엇을 놓치고Powershell에서 배열 인쇄

System.Object[]

:

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

이것은 내가 갖는 출력은 다음과 같습니다

배열의 내용은이 명령의 결과인가?

편집 :

이 전체 기능입니다 : 당신은 MatchInfo 객체를 생성하는 Select-String을 사용하고

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

그건 개체의 배열입니다. 좋습니다. 왜 'tostring()'으로 인쇄하고 있습니까? 어떤 출력물을 원하니? 당신은 쓰기 객체입니까 아니면 쓰기 호스트입니까? – TessellatingHeckler

+0

다음은 $ result + = $ singleOutput (첫 번째 $ result = @()를 선언 한 것입니다) –

+0

쓰기 호스트를 사용하고 있습니다 –

답변

9

: 나는 또한 함께 노력

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" 

. 파일에서 전체 일치하는 행을 원하는 것처럼 보이므로 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에 추가하고 반환 할 수 사용자 정의 객체 :

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

:

$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 
    } 
} 

당신 출력 배열 단순히 배열 변수를 메아리로 맞춤 형식 출력을 얻으려면 예를 들어 format operator (-f) :

을 사용할 수 있습니다.210
$result | ForEach-Object { 
    '{0}: {1}' -f $_.Server, $_.Line 
} 
+2

** 5000 회 이상 보았지만 1 회 upvote ...? ** ** ** ** ** * 사랑을 공유. –

+1

조회수 10,000 회 7 upvotes ... 이와 같이 보이지 않습니다. Q/A가 잘됩니다. 정보 변환 – GoldBishop