ich eine SQL-Abfrage haben, die Device, primäre, sekundäre und tertiäre aus einer Tabelle zieht: mit dem primärenWie leere Einträge filtern zurück von DB Abfrage
$SQLQuery= (Invoke-Sqlcmd -Serverinstance $ServerInstance -Database $Database -Query "select DeviceName, Primary, Secondary, Tertiary from dbo.Table")
ich dann werfen die Einträge in einer Hash-Tabelle/sekundäre/tertiäre als Array im Wert:
$DeviceList = @{}
foreach ($item in $SQLQuery)
{
if($item.Primary -and $item.Secondary -and $item.Tertiary)
{
$DeviceList += @{$item.DeviceName = "$($item.Primary)", "$($item.Secondary)", "$($item.Tertiary)"}
}
elseif ($item.Primary -and $item.Secondary -and !$item.Tertiary)
{
$DeviceList += @{$item.DeviceName = "$($item.Primary)", "$($item.Secondary)"}
}
elseif ($item.Primary -and !$item.Secondary -and !$item.Tertiary)
{
$DeviceList += @{$item.DeviceName = "$($item.Primary)"}
}
das Problem, das ich in laufende bin ist, dass die SQL-Abfrage leer Ergebnisse zurückgeben kann, die nicht NULL
sind. Das macht $DeviceList
sieht wie folgt aus:
$devicelist = @{
"Device1" = "[email protected]";
"Device7" = "[email protected]";
"Device8" = "[email protected]";
"Device2" = "[email protected]", "[email protected]";
"Device3" = "[email protected]", "";
"Device4" = "[email protected]", "", "[email protected]";
"Device5" = "[email protected]", "[email protected]", "[email protected]";
"Device6" = "[email protected]", "[email protected]", ""
}
ich diese durch das Werfen in einer repetitiven filtern kann, wenn Aussage wie:
elseif ($item.Primary -and !$item.Secondary -and !$item.Tertiary)
{
if($item.Primary -ne '')
{
$DeviceList += @{$item.DeviceName = "$($item.Primary)"}
}
}
aber das ist unglaublich repetitive und zeitaufwendig. Ich kann auch die SQL-Abfrage ändern, um diese zu ignorieren, aber ich bevorzuge es, die SQL-Abfrage einfach zu halten und die Filterung in PowerShell durchzuführen. Es muss einen einfacheren Weg geben, das zu tun.
Das Endergebnis, das ich suche, ist, dass, wenn der Eintrag leer ist, es wird einfach übersprungen, so würde $DeviceList
dies wie folgt aussehen:
$devicelist = @{
"Device1" = "[email protected]";
"Device7" = "[email protected]";
"Device8" = "[email protected]";
"Device2" = "[email protected]", "[email protected]";
"Device3" = "[email protected]";
"Device4" = "[email protected]", "[email protected]";
"Device5" = "[email protected]", "[email protected]", "[email protected]";
"Device6" = "[email protected]", "[email protected]"
}
Wenn meine Frage macht keinen Sinn, bitte lass es mich wissen und ich werde versuchen zu klären. Wie immer, danke !!
Andy, deine erste Antwort funktionierte perfekt, nachdem ich '$ arr = @ {}' in '$ arr = @()' geändert hatte. Du hast mein Leben so viel einfacher gemacht, vielen Dank !! – Nick