Hostwinds 博客

寻找结果为:


Powershell的力量 特色图片

Powershell的力量

通过: Karlito Bonnevie  /  四月 29, 2022


将传统Windows命令行(CLI)的命令与Linux CLI的命令进行比较时,实际上没有比较。传统的Windows CLI(CD,DIR,COPY,DEL等)中没有什么像Awk,Sed,Head,Tail,Tsort,Tsort,Uniq,Split等强大CLI是通常需要文本流处理以获得所需的结果。例如,说您需要Linux机器的IPv6地址。一种方法可能是:

ifconfig | grep inet6 | head -1 | awk '{print $2}'

GREP命令抓住了包含" Inet6"的多行,Head Command抓住了第一个线,AWK在行中绘制了第二个字段(即第二个字符串),从而产生所需的IPv6值。真的很光滑,但是我们正在处理文本流,这很快就会变得非常复杂。例如,说您想做以下操作:

  • 列出所有系统过程,然后
  • 按句柄计数按降序排序列表,然后使用CPU使用时间,然后
  • 将列表视为显示过程名称,句柄计数,CPU时间和完整过程文件路径的表格?

执行此操作的Powershell非常简单:

Get-Process | Sort-Object -Property HandleCount, CPU | Format-Table -Property Name, HandleCount, CPU, Path

这是输出的片段。可以看出,该表是按句柄计数排序的,然后按CPU时间对(请注意使用18个手柄的三个过程的降序CPU时间):

Name                    HandleCount        CPU Path
----                    -----------        --- ----
chrome                          165     375.13 /opt/google/chrome/chrome
pwsh                            128       81.1 /opt/microsoft/powershell/7/pwsh
chrome                           52     216.36 /opt/google/chrome/chrome
chrome                           44     151.13 /opt/google/chrome/chrome
Xvnc                             33     254.66 /usr/bin/Xvnc
dbus-daemon                      31       0.23 /usr/bin/dbus-daemon
chrome                           23       0.45 /opt/google/chrome/chrome
xfce4-terminal                   18      16.39 /usr/bin/xfce4-terminal
xfce4-session                    18       0.12 /usr/bin/xfce4-session
xrdp-chansrv                     18       0.05 /usr/sbin/xrdp-chansrv
xfdesktop                        15       4.39 /usr/bin/xfdesktop
xfce4-power-manager              15       0.39 /usr/bin/xfce4-power-manager
chrome                           15       0.03 /opt/google/chrome/chrome

现在说,除了上述内容外,您还想按句柄计数分组吗?它不会变得容易得多,只需将-groupby handlecount参数添加到格式表CMDLET(是的,这就是他们所谓的):

Get-Process | Sort-Object -Property HandleCount, CPU | Format-Table -Property Name, HandleCount, CPU, Path -GroupBy HandleCount

这是该输出的片段:

   HandleCount: 18

Name           HandleCount   CPU Path
----           -----------   --- ----
xfce4-terminal          18 16.68 /usr/bin/xfce4-terminal
xfce4-session           18  0.12 /usr/bin/xfce4-session
xrdp-chansrv            18  0.05 /usr/sbin/xrdp-chansrv

   HandleCount: 15

Name                HandleCount  CPU Path
----                -----------  --- ----
xfdesktop                    15 4.43 /usr/bin/xfdesktop
xfce4-power-manager          15  0.4 /usr/bin/xfce4-power-manager
chrome                       15 0.03 /opt/google/chrome/chrome

请注意,这些PowerShell示例中的任何一个都没有文本流处理的暗示。这是因为PowerShell在CMDLET和不是数据流之间传递对象(具有各种属性)。如果您真的愿意,您仍然可以使用Select-string cmdlet操纵文本流,但很少需要这样做。顺便说一句,在最后一个示例中,您可以通过任何get-process对象属性进行分组,并且可以使用get-process |开始成员,快速查看可用的属性。

听起来很有趣?想知道如何开始?然后看 将PowerShell与Linux一起使用.

撰写者 Karlito Bonnevie  /  四月 29, 2022