二、别名系统
“动词-名词”结构的cmdlet固然对新手友好,但也带来了另一个问题,命令名称过长,在命令行交互使用时不方便,在命令行窗口输入命令可以使用Tab键进行补全,可是经常使用还是需要键入大量的内容,要是能够把命令缩短一些就好了。PowerShell在设计时已经考虑到了,为此创建了别名系统,之所以叫名别系统,是因为PowerShell中的别名非常强大,能够非常方便的对别名进行增加、删除、修改,还为之创建了别名驱动器,可以像访问文件系统驱动器一样方便的访问别名驱动器。
PowerShell非常贴心的为用户创建了大量内置别名,一方面减少了常用命令的输入长度,另一方面也为熟悉其它Shell而不熟悉PowerShell的用户提供了方便,常见Shell如bash、cmd,PowerShell都为用户提供了他们熟悉的别名。下面是可以在Powershell中使用的通用的Cmd.exe和UNIX命令的简短列表。
图6:PowerShell兼容性别名列表
PowerShell除了自带别名外,用户自己也可以创建别名,不仅仅可以为cmdlet创建别名,也可以为PowerShell函数、带参数的命令和包含完整路径的命令行程序创建别名。
比如为记事本创建别名,可以使用如下命令:
New-Alias np c:\windows\notepad.exe
创建别名完成后,在命令行中输入np就能直接打开记事本。在命令行中创建的别名只能在当前命令行窗口中使用,如果想以后也能使用此别名,可以把以上命令保存在PowerShell配置文件中,以后无论是在命令行中,还是使用脚本,都可以在本机使用np别名了。PowrShell配置文件位置可以使用$profile命令查询。
想查看当前命令行窗口可以使用的别名,可以进入别名驱动器查看,使用dir alias:就能查看所有能用的别名,也可以使用get-alias命令查看别名。
图7:查看PowerShell别名驱动器
三、管理任务
Windows PowerShell的基本目标是使用户能够以交互方式或通过脚本更好、更容易地对系统进行管理控制,为了达成这个目标,PowerShell提供了大量命令来执行各种管理任务,让用户轻松完成管理系统任务。
1、管理进程
前面已经提过管理系统进程的命令,管理进程常用命令就是get-process命令和stop-process命令,get-process命令获取进程之后可以直接用管道发送给stop-process命令结束进程。比如,关闭之前打开的记事本,可以使用下面的命令很方便的关闭记事本。
get-process -Name notepad | stop-process
2、处理文件和文件夹
PowerShell使用Get-ChildItem获取文件夹中直接包含的所有项,它有系统内置别名dir和ls,使用CMD和BASH的用户均可以轻松上手。如果想查看C:中的文件夹和文件,直接使用dir c:,PowerShell立刻就会列出C:中的文件和文件夹。其它处理文件和文件夹的命令有Copy-Item、New-Item、Remove-Item等,具体用法可以使用get-help然后跟命令名称即可查询。
3、处理系统服务
可以像管理进程一样管理系统服务,Get-Service命令获取服务列表,Stop-Service命令停止服务,Start-Service命令启动服务,Suspend-Service命令挂起服务,Restart-Service命令重启服务,Set-Service服务设置服务属性。如果想一次性启动已经停止的服务,可以使用以下命令:
get-service | where-object {$_.Status -eq "Stopped"} -exclude
wisvc | start-service
这行命名会把除wisvc之外的命令都启动,这只是一个示例,不要在自己电脑使用,启动所有服务会消耗大量系统资源。
4、处理注册表
PowerShell可以非常方便的处理注册表项目,与进程和服务不同的是,PowerShell并未提供专用的注册表命令,而是使用处理文件和文件夹的命令,这并不奇怪,PowerShell为用户提供了注册表驱动器,可以很好的处理注册表项目。由于注册表对系统非常重要,错误处理注册表也许会导致系统出问题,处理注册表,特别是删除注册表项目要非常小心,最好能在处理注册表项目之前先备份要处理的项目。没有管理员权限也能处理部分注册表项目,这与regedit注册表编辑器不同,注册表编辑器必须使用管理员权限打开,然后才能操作项目。
图8:无管理员权限访问HKLM:驱动器
下面的表格列出了访问注册表所需的所有命令。
图9:处理注册表的命令与预定义的注册表驱动器
PowerShell只提供了两个注册表驱动器HKCU:和HKLM:,其中HKLM:是HKEY_LOCAL_MACHINE的缩写,HKCU:是HKEY_CURRENT_USER的缩写,如果想要访问所有注册表驱动器,可以进入Microsoft.PowerShell.Core\Registry::。
5、处理其它任务
PowerShell还可以处理证书、防火墙、appx应用、打印机等任务,篇幅所限,不具体举例。大家可以使用get-command命令查找相关命令。