我想开发一种模式,以便在执行连接到数据库的 PowerShell 函数时轻松地在数据的“视图”之间切换。
基于这篇文章Quick Hits: Set the Default Property Display in PowerShell on Custom Objects,我创建了:
<#
.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
}
-View
未指定参数时,All
使用该设置:
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
指定参数时-View
,修改默认视图:
PS> Get-CustomObject Contact
City Region Telephone
---- ------ ---------
A78D794C MN 6125551212
FDB79B27 MN 6125551212
49D073FE MN 6125551212
0716DF7E MN 6125551212
29FF9D4E MN 6125551212
问题:
- 有没有更有效的方法来做到这一点?
- 是否可以
PSTypeNames
为整个查询设置 ,而不必将其分配给每一行(从而消除对 的需要Foreach
)? - 可以为验证集中的每个项目分配别名吗?例如,
PS> Get-CustomObject d
将使用Demographics
视图。