gpt4 book ai didi

powershell - 具有动态属性的 DataRow

转载 作者:行者123 更新时间:2023-12-04 21:34:19 26 4
gpt4 key购买 nike

我的模块中有一个 cmdlet,它从数据库表中返回一组通用 DataRows,其名称由 -Name 指定。范围

# this returns a collection of datarows from table "Orders"
Get-Table -Name Orders

每次我在不同的表上调用 cmdlet 时,我都会将输出传送到 Format-Table这使它更具可读性。

有什么方法可以将属性格式化为表格,而不必每次都通过管道传输到 Format-Table ?告诉 PowerShell 始终使用表格布局来显示 DataRow 类型的东西?

我已经有一个 ps1xml文件与模块一起,包含一些格式规则,如下所示:
<View>
<Name>MyType</Name>
<ViewSelectedBy>
<TypeName>MyNamespace.MyType</TypeName>
</ViewSelectedBy>
<TableControl>
<TableRowEntries>
<TableRowEntry>
<TableColumnItems>
<TableColumnItem>
<PropertyName>Property1</PropertyName>
</TableColumnItem>
<TableColumnItem>
<PropertyName>Property2</PropertyName>
</TableColumnItem>
[...]
</TableColumnItems>
</TableRowEntry>
</TableRowEntries>
</TableControl>
</View>

我想对 System.Data.DataRow 使用类似的规则类型,但属性每次都有不同的名称,似乎我无法删除 <TableRowEntries>来自上述 XML 模板的标记。

任何的想法?

最佳答案

我会说编写自定义格式文件只是为了使 PowerShell 将对象输出为表格太费力了。

如果您真的想尝试它,那么您已经走在正确的轨道上。

我想出了一个简单的格式定义,将 DataRows 输出为表格。

但是有一个警告:我认为不可能为每一列都有自定义标签(您必须再次检查架构定义:https://msdn.microsoft.com/en-us/library/gg580910(v=vs.85).aspx)。在我的示例中,我只是使用通用名称,如“Field1”、“Field2”等。

这是 2 列的格式定义:

$TableFormat = @'
<Configuration>
<ViewDefinitions>
<View>
<Name>MyTable</Name>
<ViewSelectedBy>
<TypeName>System.Data.DataRow</TypeName>
</ViewSelectedBy>
<TableControl>
<TableHeaders>
<TableColumnHeader>
<Label>Field 1</Label>
<Width>20</Width>
</TableColumnHeader>
<TableColumnHeader>
<Label>Field 2</Label>
<Width>20</Width>
</TableColumnHeader>
</TableHeaders>
<TableRowEntries>
<TableRowEntry>
<TableColumnItems>
<TableColumnItem>
<ScriptBlock>$_.Item(0)</ScriptBlock>
</TableColumnItem>
<TableColumnItem>
<ScriptBlock>$_.Item(1)</ScriptBlock>
</TableColumnItem>
</TableColumnItems>
</TableRowEntry>
</TableRowEntries>
</TableControl>
</View>
</ViewDefinitions>
</Configuration>
'@

更新格式定义:
$FormatPath = Join-Path -Path $PSScriptRoot -ChildPath "DataTable.format.ps1xml"

$TableFormat | Set-Content -Path $FormatPath -Encoding Default

Update-FormatData -Appendpath $FormatPath

还有一个示例输出:
$CnStr = "Data Source=Starbase1\SQLEXPRESS;Initial Catalog=Northwind;Integrated Security=SSPI"

$Sql = "Select LastName, City From Employees Where City <> 'Seattle'"

$Da = New-Object -TypeName System.Data.SqlClient.SqlDataAdapter -ArgumentList $Sql, $CnStr
$Ta = New-Object -TypeName System.Data.DataTable
$Da.Fill($Ta)
$Ta

关于powershell - 具有动态属性的 DataRow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42393087/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com