Powershell 4 - Powershell 的好用之处: 从结果中去某一字段

Powershell 一个简单的命令就能够直接查看很多内容。

比如

Get-Service: 查看所有的服务状态

Get-Process: 查看所有的进程

而且你可以直接定义一个变量,把结果保存在其中。比如:

$Services = Get-Service

 

如果想在结果中取某一列的结果也非常简单。

我们先看 Get-Service:

PS C:\> Get-Service

Status   Name               DisplayName                           
------   ----               -----------                           
Running  AdobeARMservice    Adobe Acrobat Update Service          
Stopped  AdobeFlashPlaye... Adobe Flash Player Update Service     
Running  AeLookupSvc        Application Experience                
Stopped  ALG                Application Layer Gateway Service     
Stopped  AppIDSvc           Application Identity          

... ...

 

可以看到结果有3列。这三列你可以直接得到:

(Get-Service).Name  (注:不是 Get-Service.Name)

上面这个直接列出所有的 Service 名称。如下

PS C:\> (Get-Service).Name
AdobeARMservice
AdobeFlashPlayerUpdateSvc
AeLookupSvc
ALG
AppIDSvc
... ...

 

总的来说你可以直接使用 header 的任何一列 (Status/Name/DisplayName),就可以了。

 

读取文件也实在简单:

Get-Content C:\aa.txt

 

Powershell 也同样可以使用 For 循环:

$contents = Get-Content c:\SQA.reg
for ($i = 0; $i -le $contents.count ; $i ++ )
{
    Write-Host ("*******" + $contents[$i])
}

 

另外 $_ 也在 Foreach-Object -Process 经常组合使用, 代表当的变量。比如:

$contents = Get-Service;
$contents | ForEach-Object -Process{
    if ($_.name -match "^Net*")
    {
        Write-Host ($_.name);
    }
}

 

结果:

Net Driver HPZ12
Netlogon
Netman
NetMsmqActivator
NetPipeActivator
netprofm
NetTcpActivator
NetTcpPortSharing

 

大小写转换也很简单:

cls
$var1 = "   abcd   ";
$var2 = "hello world 1234 !";
$var1.ToUpper();
$var2.ToUpper();
$var1.Trim();

结果:

   ABCD   
HELLO WORLD 1234 !
abcd

排序:

(dir).Name | sort

上面命令直接对 dir 的结果的 Name 列进行排序

(dir).Name | sort -Descending

上面是反排序

 上面只是简单排序。有的时候, 你可能要根据一列的结果,排序另一列。这个时候 sort 就不行了。怎么办?  Sort-Object 搞定!

比如, 当前目录 dir 的话结果如下:

PS C:\temp> dir
    目录: C:\temp
Mode                LastWriteTime     Length Name                                                                                                                                
----                -------------     ------ ----                                                                                                                                
-a---          8/1/2015   1:33 AM        221 allen.ps1                                                                                                                           
-a---         11/1/2015   1:39 AM        578 GetExecutionResultFromTera.csv                                                                                                      
-a---          8/7/2015  10:29 AM      38250 InstallFFOnly.ps1                                                                                                                   
-a---        11/27/2015   8:55 AM        107 LibAntiPrtSc_ERROR.log                                                                                                              

我们想要按照最后修改时间来倒序列出文件,一句命令搞定:

dir c:\temp | Sort-Object LastWriteTime -Descending;

结果:

    目录: C:\temp
Mode                LastWriteTime     Length Name                                                                                                                                
----                -------------     ------ ----                                                                                                                                
-a---        11/27/2015   8:55 AM        107 LibAntiPrtSc_ERROR.log                                                                                                              
-a---         11/1/2015   1:39 AM        578 GetExecutionResultFromTera.csv                                                                                                      
-a---          8/7/2015  10:29 AM      38250 InstallFFOnly.ps1                                                                                                                   
-a---          8/1/2015   1:33 AM        221 allen.ps1           

只想列出名字?很简单:

(dir c:\temp | Sort-Object LastWriteTime -Descending).Name;

结果:

LibAntiPrtSc_ERROR.log
GetExecutionResultFromTera.csv
InstallFFOnly.ps1
allen.ps1

简直是太 easy 了!

 

posted @ 2016-04-05 14:05  allenbackpacker  阅读(1102)  评论(0)    收藏  举报