更多请看(www.omob.cc)
本文参考自Powershell快速入门(一) 安装和使用
谈到服务器系统Linux是无可争议的绝对霸主,虽然90s前后Windows Server和UNIX也曾经共同统治了小型机和大型机的服务器系统,不过后来由于各种原因逐渐份额被Linux蚕食,Windows退守桌面系统市场,UNIX蜗居少数高端大型机市场比如IBM的Power服务器。Linux在服务端的成功,除了其本身开源免费系统资源占用低稳定性好灵活可裁剪外,其中Linux的Shell为它带来的高效管理特性也立下了汗马功劳。一谈到Shell,我们就想到各种Linux发行版中内置的种类繁多但简单好用的Shell,比如bash,csh等。绝大多数程序员第一次了解shell的应该都是Linux下的bash。其实Windows/Windows Server下也可以使用功能强大的Shell来编写程序,这就是Powershell。从名字就可以看出来,Powershell的功能很强大,所以微软才敢叫Powershell,在Windows各个版本中,微软意图用PowerShell取代CMD,可以这样认为,PowerShell是CMD的超集,吸收了Linux Shell的优点,是Windows Server高效运行相关技术的重要一环。
需要说明一点,Powershell是构建在.NET平台上的,所有命令传递的都是.NET对象。不过我们简单使用的话,不懂.Net关系并不大。
我电脑安装的是Windows 10早已经内置了当下最新的Powershell 5.0 ,它在 Windows Server 2016 也是是默认安装的。至于出现时间较早的windows/windows server其他版本,也是有PowerShell的,一般条件下也可以使用。
查看当前Powershell版本的话,很简单
PS D:\workspace\langs> $PSVersionTable Name Value ---- ----- PSVersion 5.1.17134.165 PSEdition Desktop PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...} BuildVersion 10.0.17134.165 CLRVersion 4.0.30319.42000 WSManStackVersion 3.0 PSRemotingProtocolVersion 2.3 SerializationVersion 1.1.0.1
与Linux Shell不同,Powershell的命令基本上都是动词-名词
形式的。这样做的好处是命令作用简单直观很容易就可以看出,缺点就是输入稍微有些麻烦,习惯了Linux的简洁的同学会不太适应比较长的命令。Powershell和Linux Shell还有一个不同点在于Powershell是基于.NET平台的,它的命令叫做cmdlet。cmdlet功能比普通的Linux命令更强,因为cmdlet接受的参数不是字符串,而是 .NET对象,这使得Powershell 的功能更加强大和灵活。
获取命令提示
如果想要获取当前会话中所有可用的内置命令,可以使用命令Get-Command
,它的别名是gcm
获取所有内置命令
PS D:\workspace\langs> Get-Command CommandType Name Version Source ----------- ---- ------- ------ Alias Add-ProvisionedAppxPackage 3.0 Dism Alias Add-ProvisioningPackage 3.0 Provisioning ......
如果希望找出指定名称的命令,可以使用Name参数。
PS D:\workspace\langs> Get-Command -Name Get-Command CommandType Name Version Source ----------- ---- ------- ------ Cmdlet Get-Command 3.0.0.0 Microsoft.P...
获取别名
Window PowerShell为了照顾Linux系统用户或者简化命令长度,对常用的命令进行了别名,通过别名可以直接运行相关命令Get-Command -CommandType Alias
PS D:\workspace\langs> Get-Command -CommandType Alias CommandType Name Version Source ----------- ---- ------- ------ Alias % -> ForEach-Object Alias ? -> Where-Object Alias ac -> Add-Content Alias Add-ProvisionedAppxPackage 3.0 Dism Alias Add-ProvisioningPackage 3.0 Provisioning .......
例如 ls
代指Get-ChildItem
,其实ls
是linux shell里面的命令,这里Get-ChildItem
被别名为ls
PS D:\workspace\langs> ls Ŀ¼: D:\workspace\langs Mode LastWriteTime Length Name ---- ------------- ------ ---- d----- 2018/7/14 11:27 c d----- 2018/7/18 21:28 javascript d----- 2018/7/14 11:27 nodejs d----- 2018/7/18 21:28 scala -a---- 2018/7/14 11:26 7 README.md PS D:\workspace\langs> Get-ChildItem Ŀ¼: D:\workspace\langs Mode LastWriteTime Length Name ---- ------------- ------ ---- d----- 2018/7/14 11:27 c d----- 2018/7/18 21:28 javascript d----- 2018/7/14 11:27 nodejs d----- 2018/7/18 21:28 scala -a---- 2018/7/14 11:26 7 README.md
获取动词/名词
如果想查找特定动词/名词的命令也是可以的。比方说,如果我想查找所有以Get开头的命令,可以使用下面的命令Get-Command -Verb Get
PS D:\workspace\langs> Get-Command -Verb Get CommandType Name Version Source ----------- ---- ------- ------ Alias Get-DiskSNV 2.0.0.0 Storage Alias Get-PhysicalDiskSNV 2.0.0.0 Storage
获取帮助
如果要获取一个命令的帮助,可以使用Get-Help
。如果使用上面介绍的列出别名的命令的话,会发现这个命令的别名是man
,恰好就是Linux
系统下的获取帮助的命令。
PS D:\workspace\langs> man cls 名称 Clear-Host 摘要 语法 Clear-Host [<CommonParameters>] 说明 相关链接 https://go.microsoft.com/fwlink/?LinkID=225747 备注 若要查看示例,请键入: "get-help Clear-Host -examples". 有关详细信息,请键入: "get-help Clear-Host -detailed". 若要获取技术信息,请键入: "get-help Clear-Host -full". 有关在线帮助,请键入: "get-help Clear-Host -online"
值得一提的还有帮助参数-?
、如果一个命令添加了帮助参数,那么Powershell 不会实际执行这个命令,而是显示它的帮助信息。
PS D:\workspace\langs> cls -? 名称 Clear-Host 摘要 语法 Clear-Host [<CommonParameters>] 说明 相关链接 https://go.microsoft.com/fwlink/?LinkID=225747 备注 若要查看示例,请键入: "get-help Clear-Host -examples". 有关详细信息,请键入: "get-help Clear-Host -detailed". 若要获取技术信息,请键入: "get-help Clear-Host -full". 有关在线帮助,请键入: "get-help Clear-Host -online"
服务管理
如果我们使用批处理来管理Windows服务的话,一般情况下用的是sc
这个命令。这个命令的作用有很多,其中一项就是启动和停止Windows服务。不过在PowerShell下有更好用的服务管理命令,功能也更加强大。
Get-Command -Noun service
查找有关Service管理相关的命令
PS D:\workspace\langs> Get-Command -Noun service CommandType Name Version Source ----------- ---- ------- ------ Cmdlet Get-Service 3.1.0.0 Microsoft.P... Cmdlet New-Service 3.1.0.0 Microsoft.P... Cmdlet Restart-Service 3.1.0.0 Microsoft.P... Cmdlet Resume-Service 3.1.0.0 Microsoft.P... Cmdlet Set-Service 3.1.0.0 Microsoft.P... Cmdlet Start-Service 3.1.0.0 Microsoft.P... Cmdlet Stop-Service 3.1.0.0 Microsoft.P... Cmdlet Suspend-Service 3.1.0.0 Microsoft.P...
查看Windows 10的XboxGipSvc服务信息
PS D:\workspace\langs> Get-Service XboxGipSvc Status Name DisplayName ------ ---- ----------- Stopped XboxGipSvc Xbox Accessory Management Service