欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

PowerShell 入门1

程序员文章站 2022-03-09 12:23:37
...

更多请看(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
相关标签: PowerShell