J'essaie d'imprimer un tableau (j'ai essayé les deux avec une boucle for et directement avec .ToString()
), mais j'obtiens toujours un System.Object
sortie.
Le contenu du tableau est le résultat de cette commande:
$singleOutput = Invoke-Command -ComputerName $server -ScriptBlock {
Get-ChildItem C:\*.txt -Recurse |
Select-String -Pattern "password" -AllMatches
}
Voici le résultat que j'obtiens:
System.Object []
Qu'est-ce que je rate?
MODIFIER:
Ceci est la fonction entière:
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"
J'ai aussi essayé avec:
foreach ($i in $result) {
$result[$i].ToString()
}
Vous utilisez Select-String
, qui produit MatchInfo
objets. Puisqu'il semble que vous voulez toutes les lignes correspondantes des fichiers, vous devriez probablement renvoyer uniquement la valeur de la propriété Line
des objets MatchInfo
. En outre, la manipulation de votre tableau est trop compliquée. Vient de sortir tout ce que Invoke-Command
retourne et capture la sortie de la boucle dans une variable. Pour la sortie de statut à l'intérieur de la boucle, utilisez Write-Host
, pour que les messages ne soient pas capturés dans $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
}
}
Si vous avez également besoin du nom d'hôte, vous pouvez l'ajouter avec un propriété calculée et renvoyer des objets personnalisés:
$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
}
}
Vous produisez un tableau simplement en faisant écho à la variable tableau:
PS C: \> $ résultat Ligne du serveur ------ ---- ... ...
Pour obtenir une sortie au format personnalisé, vous pouvez par exemple utiliser le opérateur de formatage (-f
):
$result | ForEach-Object {
'{0}: {1}' -f $_.Server, $_.Line
}