将数据表转换/处理为自定义 PSObject 的最快方法

MKA*_*NET 2 mysql datatable powershell

我能够从 MySql 查询填充数据表 $devices (例如)

PS C:\Users\MKANET\Desktop\dev\lab> $devices.table[10]

name                                    ip                                          mac                                    vendor
----                                    --                                          ---                                    ------
ComputerTest                            10.51.18.6                                  fd1969ff4cb9                           HewlettP
Run Code Online (Sandbox Code Playgroud)

我想将该数据表类型转换为自定义 PSObject;其中,mac 列转换为 PSObject NoteProperty 名称“Mac-Address”;并且,将各个值转换为 00-00-00-00 字符串格式:

PS C:\Users\MKANET\Desktop\dev\lab> $devices[1]

name                               ip                                      MAC-Address                             vendor
-------                            --                                      -----------                             ------------
ComputerTest                       10.51.18.6                              fd-19-69-ff-4c-b9                       HewlettP
Run Code Online (Sandbox Code Playgroud)

考虑到这些数据表可能相对较大(可能有几百行),我需要最快的处理方法在Powershell中执行此操作。

如果它会使转换/修改过程显着加快,我很乐意将 $Devices 保留为数据表;仅将“mac”列的值修改/处理为:00-00-00-00-00-00 文本格式,永久

fer*_*_io 5

使用 Select-Object,它应该在 Powershell 中自动将 DataRow / DataTable 转换为 PSCustomObject。以下是我将运行的代码,以将其转换为 PSCustomObject 并在一行中处理 MAC 地址格式。这可以应用于特定索引处的单行(如示例代码)或应用于整个 DataTable 以转换为 PSObject 数组。

MAC 地址格式会删除原始文件中的所有非字母数字字符,转换为小写,然后在适当的索引处插入连字符。

$devices.table[10] | Select-Object name,ip,@{N="MAC-Address";E={((((($_.mac -replace '[^a-zA-Z0-9]','').ToLower().insert(2,"-")).insert(5,"-")).insert(8,"-")).insert(11,"-")).insert(14,"-")}},vendor
Run Code Online (Sandbox Code Playgroud)