Vous ne pouvez pas avoir des noms de clés en double dans une table de hachage.
Donc vous êtes mieux avec un PSCustomObject
c'est en fait une table de hachage :
$Services = Get-CimInstance -ClassName WIN32_Service | Sort-Object -Property Name
foreach($service in $Services){
try{
[PSCustomObject]@{
"Service Name" = $Service.Name
"Process Name" = (Get-Process -Id $service.ProcessID).Name
"Process ID " = $service.ProcessID
"Description" = $service.Description
}
} Catch {
$Error[0].exception.message
}
}
Je suis également certain que vous recherchez le nom du service associé et non le nom du processus, puisque Get-Process
retourne déjà cette information pour vous.
EDITAR
En y réfléchissant un peu plus... Peut-être que si vous intervertissez l'ordre dans ce que vous voulez, c'est-à-dire le nom du service d'abord, puis le nom du processus, vous pouvez utiliser une balise table de hachage :
$Services = Get-CimInstance -ClassName WIN32_Service | Sort-Object -Property Name
$HashTable = @{}
$other = @{}
foreach($service in $Services){
Try{
$HashTable.Add($service.Name,$((Get-Process -ID $service.ProcessId).Name) )
}Catch{
$other.Add($service.Name,$((Get-Process -ID $service.ProcessId).Name) )
}
}
J'ai ajouté une table de hachage secondaire juste au cas où il y aurait un service de même nom (ce qui ne devrait pas être le cas), vous serez toujours en mesure de récupérer la paire clé-valeur. Bien que cela fonctionne, je recommande toujours d'utiliser une table de hachage secondaire. PSCustomObject
car cela vous donne plus de possibilités de travailler.
Cela fonctionne parce que les noms des services sont uniques.