PowerShell 笔记 - 基础篇
阅读原文时间:2022年05月18日阅读:1

Powershell 笔记

查看powershell版本

PS C:\Users\chino> $PSVersionTable

Name                           Value
----                           -----
PSVersion                      5.1.22000.653
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.22000.653
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1

查看简易帮助文档

help cmdlet  ##例如 help Get-Service

如果没有帮助文档, 需要先运行以下命令更新帮助文档(需要以管理员运行)

Update-Help

如果计算机无法上网, 可以用以下方式离线来安装帮助文档

先从已经安装帮助文档的机器运行以下命令

Save-Help -DestinationPath ./

从另一台服务器运行以下命令装载帮助文档

Update-Help -SourcePath ./

使用帮助系统查找命令, 例如想查找系统事件日志, 却不知道使用哪个命令, 可以运行以下命令

Help *log*
Help *event*

或者使用Get-Command (简写gcm) 查询cmdlet命令

gcm *log*


get-help cmdlet --detailed  查看详细帮助, 相当于man
get-help cmdlet --examples  查看样例

常用的参数类型

  • string, 数字字母和空格, 如果出现空格符, 全部字符串必须包含在引号内部, 最好用单引号.
  • Int, Int32或Int64, 一个整数类型, 不包含小数
  • DateTime, 时间日期类型

如果参数类型为数据集合, 可以使用, 隔开, 例如

Get-EventLog Security -computer server1,DC4,file2

可选参数与必选参数 / 位置参数

例如 Get-Help
Get-Help [[-Name] <string>] [-Path <string>] [-Category {Alias | Cmdlet | Provider | General | FAQ | Glossary | HelpFile | ScriptCommand | Function | Filter | ExternalScript | All | DefaultHelp | DscResource | Class | Configuration}] [-Full] [-Component <string[]>] [-Functionality <string[]>] [-Role <string[]>] [<CommonParameters>]

[[-Name] <string>] 是一个位置参数, 因为参数名称在一个方括号内, 同时还是一个可选参数, 因为参数名称和参数值位于同一个方括号内.

位置参数可以不用指定参数名, 比如Get-Help Get-EventLog 可以直接运行而不用指定 -Name 参数名.

最佳实践是总是指定参数名, 熟练以后再使用位置参数来节省时间

Cmdlet 的命名惯例,以标准的动词开始比如Get, Set, New, 或Pause

powershell中的别名: 只是命令的一个昵称, 无法包含任何参数

使用快捷方式:

  • 简化参数名称: powershell不要求输入完整的参数名称, 例如可以用-comp代替-ComputerName , 必须是唯一识别参数所需要输入的最少的部分. 比如在参数-ComputerName-Composit 都存在的情况
  • 参数名称别名. 例如 Get-Command Get-EventLog | select -ExpandProperty parameters 可以查看别名, -Cn 就是 -ComputerName 的别名
  • 位置参数. 例如Get-ChildItem C:\ 替代 Get-ChildItem -Path C:\

Show-Command cmdlet 命令可以在windows上以GUI的方式列出命令的参数名称

PSProvider,其本质上是一个适配器。它可以接受某些数据存储,并使得这些介质看起来像是磁盘驱动器一样。你可以通过下面的命令查看当前Shell中已经存在的提供程序.

Get-PSProvider

Name                 Capabilities                                        Drives
----                 ------------                                        ------
Alias                ShouldProcess                                       {Alias}
Environment          ShouldProcess                                       {Env}
FileSystem           Filter, ShouldProcess, Credentials                  {/, Temp}
Function             ShouldProcess                                       {Function}
Variable             ShouldProcess                                       {Variable}

可以通过模块或者一些管理单元来将一些提供程序添加到powershell中, 这也是powershell仅支持的两种扩展方式. 如果启用了某些powershell功能, 可能也会新增一个PSProvider, 比如开启了远程处理时, 会新增 WSMan Credentials

PSProvider常见的功能描述:

  • ShouldProcess 提供支持-WhatIf-Confirm参数, 保证我们在正式执行这部分脚本之前可以对它们进行测试
  • Filter 在cmdlet中操作提供程序的数据时, 支持-Filter参数
  • Credentials 改提供程序允许使用可变更的凭据连接数据存储, 这也就是-Credentials参数的作用
  • Transactions 该提供程序支持事务, 也就是允许在改提供程序中将多个变更作为一个原子操作进行提交或者全部回滚

可以使用某个提供程序创建一个PSDrive, PSDrive可以通过一个特定的提供程序连接到某些存储数据的介质, 这和在windows资源管理器中类似, 本质上是创建一个驱动器映射, 但是由于PSDrive使用了提供程序, 除了可以连接磁盘以外, 还能连接更多的数据存储介质, 运行Get-PSDrive 可以看到当前已经连接的驱动器.

可以通过一系列cmdlets去查阅和操作每个PSDrive呈现出来的数据, 大多数情况下, 操作PSDrive的cmdlet名词部分都会包含item. 可以通过Get-Command -noun *Item* 查看这些cmdlets

PSPrivider

常规文件操作

Windows 文件系统包括三部分: 磁盘驱动器, 文件夹, 文件.

PSDrive指向的对象都称为Item, Item可以是文件, 文件夹

切换目录

Set-Location -Path 'C:\Windows' # 等同于cd 'C:\Windows'

创建一个项Item

New-Item -ItemType directory folder # ItemType不指定默认创建文件类型的Item

Mkdir 也可以创建文件夹, 但Mkdir是一个function, 隐式调用了New-Item, 并指定ItemType为directory

powershell 可以使用?* 通配符, 如果文件名字中包含?或者*. 可以用-LiteralPath 参数. 该参数不支持任何通配符, 严格按照键入的值使用.

查看所有的PSDrive

Get-PSDrive
## 此处为mac下运行, windows下可以看到注册表类型HKCU, HKLM 等
Name           Used (GB)     Free (GB) Provider      Root                                    CurrentLocation
----           ---------     --------- --------      ----                                    ---------------
/                 226.26        239.37 FileSystem    /                                                   tmp
Alias                                  Alias
Env                                    Environment
Function                               Function
Temp              226.26        239.37 FileSystem    /var/folders/zp/53pdcbdj4q7g7d_sf6…
Variable                               Variable

操作注册表

Set-Location -Path HKCU:
Set-Location xxx   ## 选中要修改的注册表路径
Set-ItemProperty -Path DWM -PSProperty EnableColorization -Value 0  ## 设置

注意: Set-Item 无法作用于FileSystem的Provider, 修改文件内容用Set-Content