文章目录
- reference
- automatic variables reference
- special variable:`$_.`
- 引用ls 的结果
- ls内容排序显示
- where
- 获取属性的完整值
- 表达式中的模糊字符(通配字符串)
- 使用-like参数
- 自带筛选器的cmdlet
- select-string
- 多目录多文件中搜索
- 在管道符中使用sls
- grep
reference
link
automatic variables reference
about Automatic Variables - PowerShell | Microsoft Docs
special variable:$_.
reference link
Get-Process | ForEach-Object {$_.ProcessName}
$_
往往不能够单独使用,配合forEach或where是常用的
对于管道符,表达式这可以作为管道符的第一个元素(即管道符左侧)管道右侧,需要以某个命令开头,该命令的参数放可以是表达式(所以,像如下命令不可以正常运行正是首先于管道符的使用规则.
引用ls 的结果
既然直接从管道符后面引用$_
不那么如意,我们可以用一个变量去接受ls的返回结果,然后再对这个变量执行一些操作(例如访问对象的某些属性/方法)
ls内容排序显示
例如按访问时间
ls * | sort {$_.LastaccessTime}
where
where
& $_
$_
经常使用在管道符中,作为前一个变量的输出对象来作为下一个命令的输入(您可以从中提取需要的属性完成一定的逻辑)
譬如,在作为筛选工具对象的where-object
的值表达式中经常会用的$_
Get-Process | Where-Object {$_.ProcessName -eq ‘dllhost’}
为了提取合适的字段,您或许需要利用其他cmdlet(format-list
(简写为fl
)/get-member
(gm
)来获取准确的字段.
获取属性的完整值
-
format-table
(ft
)可以获取变量的简写值 -
format-list
(fl
)可以获取变量的完整值
- 例如
gdr|select -First 3| fl
-
select
也可以获取指定变量的完整的值
- 例如
表达式中的模糊字符(通配字符串)
使用-like参数
about Wildcards - PowerShell | Microsoft Docs 这可以让where命令更加好用
应用实例:
自带筛选器的cmdlet
某些cmdlet自带筛选器,自带筛器一般具有更好的性能
SYNOPSIS
Selects objects from a collection based on their property values.
--------------- Example 1: Get stopped services ---------------
Get-Service | Where-Object {$_.Status -eq "Stopped"}
Get-Service | where Status -eq "Stopped"
-------- Example 2: Get processes based on working set --------
Get-Process | Where-Object {$_.WorkingSet -GT 250MB}
Get-Process | Where-Object WorkingSet -GT (250MB)
-------- Example 3: Get processes based on process name --------
Get-Process | Where-Object {$_.ProcessName -Match "^p.*"}
Get-Process | Where-Object ProcessName -Match "^p.*"
除了$_
可以帮助用来构建脚本块表达式来辅助where 执行筛选
还有select-string
这个十分有用的cmdlet
select-string
缩写别名为sls
Select-String (Microsoft.PowerShell.Utility) - PowerShell | Microsoft Docs
reference link2 实例代码:
生成演示素材文件:`Alias.txt` /`Command.txt`
Get-Alias | Out-File -FilePath .\Alias.txt
Get-Command | Out-File -FilePath .\Command.txt
# 利用sls进行多文件同时查找
Select-String -Path .\*.txt -Pattern 'File'
处理从文件中刷选满足条件的行,也可以通过管道符来使用sls
sls相比于where
更加灵活,也更加强大
多目录多文件中搜索
在管道符中使用sls
在管道符表达式中,管道符前的结果将默认作为sls
的第一个参数(但是最好带上参数来指明各个值
的含义
ls |sls -Pattern "<your Match pattern string>"
某种程度上进一步实现了grep
的一些效果.
grep
grep
是基于文本流的筛选工具
只需要考虑文本正则表达式的编写即可使用
但是在某些时候grep很管用(很方便)
在powershell中,可以通过安装第三方工具实现grep(当然用法于Linux上的有所区别
(可以通过scoop
搜索相关工具并安装)
PS C:\Users\cxxu_11> scoop search grep
'main' bucket:
busybox (4487-gd239d2d52) --> includes 'egrep'
gettext (0.21-v1.16) --> includes 'msggrep.exe'
gow (0.8.0) --> includes 'egrep.exe'
grep (2.5.4)
nim (1.6.0) --> includes 'nimgrep.exe'
pcregrep (10.20)
ripgrep (13.0.0)
rktools2k3 (1.0) --> includes 'qgrep.exe'
ugrep (3.3.8)
unxutils (2007.03.01) --> includes 'agrep.exe'
例如,可以安装第一个工具箱,内部就包含有grep工具
PS C:\Users\cxxu_11> printenv | grep apps -i
CPwindowsApps=C:\Program Files\windowsApps
oneNote10Home=C:\Program Files\windowsApps\Microsoft.Office.OneNote_16001.14326.20458.0_x64__8wekyb3d8bbwe
Path=D:\Program Files\PowerShell\7;C:\Program Files\WindowsApps\Microsoft.WindowsTerminal_1.9.1942.0_x64__8wekyb3d8bbwe;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;