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的方式列出命令的参数名称
Powershell 提供程序(PSProvider)
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
PSProvider常规文件操作
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
PSProvider操作注册表
Set-Location -Path HKCU:
Set-Location xxx ## 选中要修改的注册表路径
Set-ItemProperty -Path DWM -PSProperty EnableColorization -Value 0 ## 设置
注意: Set-Item
无法作用于FileSystem
的Provider, 修改文件内容用Set-Content