基礎 查看powershell版本 PS C:\Users\chino> $PSVersionTable Name Value PSVersion 5.1.22000.653 PSEdition Desktop PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...} ...
基礎
查看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