: 나는 또한 함께 노력
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
}
그건 개체의 배열입니다. 좋습니다. 왜 'tostring()'으로 인쇄하고 있습니까? 어떤 출력물을 원하니? 당신은 쓰기 객체입니까 아니면 쓰기 호스트입니까? – TessellatingHeckler
다음은 $ result + = $ singleOutput (첫 번째 $ result = @()를 선언 한 것입니다) –
쓰기 호스트를 사용하고 있습니다 –