Ale*_*ise 16 arrays powershell
我正在尝试打印一个数组(我尝试使用for循环并直接使用.ToString()),但我总是得到一个System.Object输出.
数组的内容是此命令的结果:
$singleOutput = Invoke-Command -ComputerName $server -ScriptBlock {
Get-ChildItem C:\*.txt -Recurse |
Select-String -Pattern "password" -AllMatches
}
Run Code Online (Sandbox Code Playgroud)
这是我得到的输出:
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"
Run Code Online (Sandbox Code Playgroud)
我也尝试过:
foreach ($i in $result) {
$result[$i].ToString()
}
Run Code Online (Sandbox Code Playgroud)
Ans*_*ers 37
你正在使用Select-String,它产生MatchInfo对象.因为看起来你想要文件中的整个匹配行,你可能应该只返回对象Line属性的值MatchInfo.此外,您的数组处理过于复杂.只输出任何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
}
}
Run Code Online (Sandbox Code Playgroud)
如果您还需要主机名,则可以使用计算属性添加它并返回自定义对象:
$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
}
}
Run Code Online (Sandbox Code Playgroud)
只需回显数组变量即可输出数组:
PS C:\> $result Server Line ------ ---- ... ...
要获得自定义格式的输出,您可以使用格式operator(-f):
$result | ForEach-Object {
'{0}: {1}' -f $_.Server, $_.Line
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
56509 次 |
| 最近记录: |