Ich möchte ein Muster entwickeln, um einfach zwischen "Ansichten" von Daten zu wechseln, wenn Sie eine PowerShell-Funktion ausführen, die eine Verbindung zu einer Datenbank herstellt.Verwenden PSTypeNames, um Invoke-SqlCmd Datenelemente
zu diesem Artikel Basierend Quick Hits: Set the Default Property Display in PowerShell on Custom Objects, ich erstellt:
<#
.NOTES
Assumes a table named `Person` with columns `FirstName`,`LastName`,`Gender`,`BirthDate`,`City`,`Region`,`Telephone`
#>
function Get-CustomObject {
param(
[Parameter(Position=0)]
[ValidateSet('Demographics','Contact','All')]
[alias('v')]
[System.String]$View='All'
)
Remove-TypeData -TypeName User.Information -ErrorAction SilentlyContinue
Switch ($View) {
'Demographics' { Update-TypeData -TypeName User.Information -DefaultDisplayPropertySet FirstName,LastName,Gender }
'Contact' { Update-TypeData -TypeName User.Information -DefaultDisplayPropertySet City,Region,Telephone }
}
Invoke-SqlCmd -ServerInstance ServerName -Database DatabaseName -Query 'SELECT * FROM Person' |
ForEach {
# assign typename
$_.PSTypeNames.Insert(0,'User.Information')
# return object
$_
} #/ForEach
}
Wenn die -View
Parameter nicht angegeben wird, wird die All
Einstellung verwendet:
PS> Get-CustomObject
Id : 20
FirstName : DCD65A17
LastName : 05016468
City : 4DF12729
Region : MN
Telephone : 6125551212
Gender : F
Occupation : abcdefghij
Birthdate : 1/1/1900 12:00:00 AM
Wenn die -View
Parameter angegeben wird, Die Standardansicht wurde geändert:
PS> Get-CustomObject Contact
City Region Telephone
---- ------ ---------
A78D794C MN 6125551212
FDB79B27 MN 6125551212
49D073FE MN 6125551212
0716DF7E MN 6125551212
29FF9D4E MN 6125551212
Fragen:
- Gibt es eine effizientere Möglichkeit, dies zu tun?
- Kann die
PSTypeNames
für die Abfrage als Ganzes festgelegt werden, anstatt sie jeder Zeile zuzuordnen (wodurch die Notwendigkeit für dieForeach
entfällt)? - Kann jedem Element im Validierungssatz ein Alias zugewiesen werden? Zum Beispiel würde
PS> Get-CustomObject d
die AnsichtDemographics
verwenden.