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 文本格式,永久。
使用 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)