J'ai une fonction qui renvoie certaines instances d'une base de données:
Instans/er: instance1, instance2, instance3
Elle filtre le nom de chaque instance et l'imprime comme telle:
Instans/er: Name ---- instance1 instance2 instance3
3 Réponses :
Sans changer votre fonction actuelle, vous pouvez faire:
function Get-ServiceStatus ([string[]]$server)
{
$InstanceList = foreach ($s in $computer)
{
if (Test-Connection $s -Count 2 -Quiet)
{
Get-WmiObject win32_Service -Computer $s |
where {$_.DisplayName -match "SQL Server"} |
select -ExpandProperty Name
}
}
$InstanceList -Join ', '
}
"Instans/er: $(Get-ServiceStatus)"
Ou vous pouvez modifier la fonction pour afficher de cette façon par défaut (en gardant à l'esprit que cela entraîne que votre fonction ne renvoie plus de collection de noms, mais à la place une seule chaîne qui pourrait être moins utile):
$InstanceList = (Get-ServiceStatus).Name -Join ', ' "Instans/er: $InstanceList"
Les deux solutions utilisent simplement l'opérateur -Join pour rejoindre la collection de Nommez les chaînes avec une virgule et un espace.
Essayez ceci:
function Get-ServiceStatus ([string[]]$server)
{
$instances = foreach ($s in $computer)
{
if (Test-Connection $s -Count 2 -Quiet)
{
Get-WmiObject win32_Service -Computer $s |
where {$_.DisplayName -match "SQL Server"} |
select -ExpandProperty Name
}
}
foreach ($instance in $instances)
{
$formattedinstances = $instance + ", "
}
$formattedinstances = $formattedinstances.Substring(0,$formattedinstances.Length-2)
return $formattedinstances
}
"Instans/er: $(Get-ServiceStatus)"
En plus de ce qui a déjà été dit, je suggère fortement d'améliorer votre fonction pour devenir un fonction avancée comme suit:
$servers | Get-SqlServerInstance | select PSComputerName, Name
Ensuite, vous pouvez faire ceci:
XXX
Si c'est trop long pour vous, enveloppez-le dans une petite fonction d'aide:
function Print_ServiceStatus ([string[]]$servers) {
$instances = $servers | where {
Test-Connection $_ -Count 1 -Quiet
} | Get-SqlServerInstance | select -Unique -ExpandProperty Name
Write-Host "Instans/er: $($instances -join ', ')"
}
Mais, je suis très sûr que cela ferait sens pour afficher le nom de l'ordinateur aussi:
$instances = $servers | where {
Test-Connection $_ -Count 1 -Quiet
} | Get-SqlServerInstance | select -Unique -ExpandProperty Name
"Instans/er: $($instances -join ', ')"
À mon humble avis, ce serait la meilleure pratique et la manière la plus "PowerShell-ish" de le faire. p>
Get-SqlServerInstance est un nom plus approprié décrivant ce que fait la fonction Test-Connection ne fait pas vraiment partie du but de la fonction. Votre fonction devrait lancer si elle ne peut pas se connecter! Alors je l'ai déplacé en dehors de la fonction.
Je suggérerais de jeter un œil à
format-list