PowerShell 重命名属性列


在之前的文章中我们有提到怎样将那些来自不同的控制台工具生成的逗号分隔的CSV数据转换成丰富的 PowerShell对象,你可能已经清楚了怎样通过PowerShell访问那些被别本地化的属性列。本篇文章会提到一个更加实用的解决方案,如何重命名这些属性列,让被本地化的数据可以跨平台被访问。

下面的例子会演示如何将TaskList.exeg工具生成的原始数据转换成自定义列名的PowerShell对象。先稍作说明,下面的变量$columns保存的是原始的表头,变量$columnNames保存的是你想替换的可选的表头。

$data = @(tasklist /V /FO CSV | ConvertFrom-Csv)
$columns = $data[0].PSObject.Properties | Where-Object { $_.MemberType -eq 'NoteProperty' } | Select-Object -ExpandProperty Name
$columnNames = '进程名', '进程ID', '进程会话', '会话ID', '内存使用', '当前状态', '拥有者', 'CPU情况', '窗口标题'
$customProperties = $columns | ForEach-Object {$i=0}{ #小心,前面的花括号不可以换行,不信,你试试。
        @{
            Name = $columnNames[$i];
            Expression= [ScriptBlock]::Create(('$_.''{0}''' -f $columns[$i]))
          };
         $i++; 
     }
$data | Select-Object -Property $customProperties | ft

控制台输出:

进程名                     进程ID 进程会话 会话ID 内存使用  当前状态 拥有者              CPU情况 窗口标题
------                     ------ -------- ------ --------  -------- ------              ------- --------
System Idle Process        0      Services 0      24 K      Unknown  NT AUTHORITY\SYSTEM 4:48:03 暂缺
....

从输出的结果来看,上面的脚本可以获取正在运行的进程的扩展信息,信息的详细程度与Get-Process相比,有过之,而无不及。最主要的生成的对象不再受属性本地化的约束,可以自定义属性列名称了。

原文链接:http://powershell.com/cs/blogs/tips/archive/2012/10/09/renaming-object-columns.aspx

本文链接: https://www.pstips.net/powershell-object-columns.html
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!

关于 Mooser Lee

我是一个Powershell的爱好者,创建了PowerShell中文博客,热衷于Powershell技术的搜集和分享。本站部分内容来源于互联网,不足之处敬请谅解,并欢迎您批评指正。

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注