PowerShell学习笔记(一) 初步概念

时间:2021-09-19 00:19:51

从最简单的例子讲起吧。

 

查看f:/game目录下的文件,可以用dir f:/game,也可以用ls f:/game,还可以用gci f:/game,更可以用Get-ChildItem f:/game。其实,dir或ls就是get-ChildItem的一个Alias。我们可以用Get-Alias查询所有的Alias。或者跟上要查询的Alias,例如,Get-Alias ls。


当然,我们也可以自己设置Alias。怎么用呢?呃。。。。。。我只记得是set-Alias。没关系,我们可以用get-help来查询。get-help set-alias。我当然最好有现成的例子,那就用get-help set-alias -full。

 

我们就按照例子1的写法,写:
set-alias -name listfiles -value get-childitem。其实,-name 和 -value也可以省略。这样,用listfiles等同于get-chileditem了。

 

想知道所有的命令,可以用get-command命令。如果想查询set-xxx的命令,可以用get-command -verb set。又如果想查询操作List的命令,可以用get-command -noun list。亦或干脆用通配符,例如,看看哪些命令以“process”结尾的:get-command *process。

 

还是以dir f:/game为例。假设我们只关心name和length,那么只要get-childitem f:/game|select-object name,length。更进一步,我们想对length排个序:get-childitem f:/game|select-object name,length|sort-object length。如果想要排倒序,最后再加一个参数-desc即可。

 

管道符“|”用来承接上一命令获取的对象。

 

又例如,我们想要看看系统的当前进程。用命令get-process。我们要看看进程名为“notepad”的进程。get-process|where-object {$_.ProcessName -eq "notepad"}。又比如,我们要看看sql开头的进程,那么可以打get-process|where-object {$_.ProcessName -match "^sql*"}。支持正则表达式。

 

或者就用简单方法,get-process sql*。

$_是个特殊的变量,代表对集合中的每一个值进行操作时的那个变量。


现在来个好玩一点,顺便理解下为啥说PowerShell返回的可以是对象。我们开一个计算器calc.exe,然后用PowerShell关闭它。

$calc = Get-Process|where-object {$_.ProcessName -eq "calc"}
或者 $calc = Get-Process calc

Stop-Process $calc.Id

 

如果calc并不存在会报错,暂时不用理会,先按我们设定的来吧。

 

当然了,$calc不会只有那么点属性的。既然是对象,那一定也有方法有属性。我们可以用Get-Member来查看。
$calc = Get-Process calc
Get-Member -InputObject $calc

 

顺便提一句题外话,还有连写的写法,例如:Get-Member -InputObject (Get-Process calc)。

注意到有个Kill方法。我们用$calc.Kill(),哈哈,也关掉了。

 

我们也可以显示默认不显示的值,比如echo $calc |select-object starttime。当然前提是计算器还是要运行着。