您好,登錄后才能下訂單哦!
2006年,微軟發布一款叫做Windows PowerShell的全新腳本語言。
PowerShell與命令提示符shell一樣,PowerShell可以進行交互性地輸入命令。也可以很容易的使用管道和重定向將文件和程序串聯起來。
不過,PowerShell確是一個強大的面向對象的語言,可以用于復雜的腳本編程。
關于cmd
如果在命令提示符下輸入dir,dir命令將會在屏幕打印出目錄中的文件名、大小和時間戳等信息。可以使用>重定向操作符將這些文本導入到一個文件中,或者使用|操作符將文本管道連接到另一個程序。例如:
dir /s /b| sort
上述命令列出了當前目錄及其子目錄中的文件,作為一個文本流,并且這些文本發送給了sort程序,sort按照字母順序對它們排序。
PowerShell和對象
PowerShell命令似乎以同樣的方式工作,但是它的命令行處理的是對象而不是文本。這個對象就是像Java中面向對象的那個對象。這些對象表示文件、文件夾、Windows設備驅動、網絡服務的對象,以及記錄了.NET框架庫中定義的數百個對象中的任何之一的對象。
通過管道符號從一條命令流向下一條命令,是對象流。各種PowerShell命令可以生成、操作這些對象,調用這些對象上的方法,修改這些對象的屬性,以及從這些對象提取信息。
關于cmdlet
Cmdlet讀作command-let。
PowerShell內建命令起名叫做cmdlet。之所以起個這么奇怪的名字可能是因為,它們不像cmd.exe的命令那樣完全內建到PowerShell中,也并不是真的像.exe文件一樣完全獨立于PowerShell。它們以一種新的方式實現,因此需要一個新的單詞。
Cmdlet的一些簡單說明
Cmdlet名稱不區分大小寫。
微軟程序員選擇使用一個名詞-動詞的慣例來命名cmdlet。
這樣使得該名稱更清晰的說明cmdlet實際做什么。
Cmdlet命令行選項的名稱也一樣的長。
一些命令可以縮短到更短。
例如使用new-alias命令可以為cmdlet起一個短名別名。
dir命令在PowerShell中輸入后發生了什么
PowerShell dir命令實際上是Get-ChildItemcmdlet的一個別名。可以輸入這兩個名字中的任何一個,來得到同樣的結果。
不帶其他參數的時候,Get-ChildItem針對當前目錄中的所有文件和子目錄,列出File和Folder對象。如果輸入了命令dir而不帶參數,Get-ChildItem會顯示出File和Folder對象的一個列表,別切由于沒有管道或輸出重定向,結果會出現在Windows PowerShell命令窗口中。
當對象進入到PowerShell窗口的時候,PowerShell會針對每個對象打印一行,以漂亮的表格格式,列出每個對象最重要的屬性。例如:
PSE:\py> dir
目錄: E:\py
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2015/11/18 18:28 30 a.txt
-a--- 2015/8/6 18:09 1510 t1.py
-a--- 2015/9/13 13:15 320 t2.py
-a--- 2015/9/13 12:57 37 t2.txt
-a--- 2015/11/19 14:40 224 t3.py
PSE:\py>
在各欄頂部的標題,是要顯示的屬性的名稱。這個列表對于cmdlet產生的任何其他對象類型來說都是類似的。
常規命令提示符環境中的dir命令生成固定格式的文本。PowerShell中的dir cmdlet,生成File和Folder對象的一個列表,PowerShell事后將其格式化為一個文本列表。
可以使用>符號,將一個PowerShell cmdlet的輸出重定向到一個文件;并且會發生相同的事情:對象流格式化為一個漂亮的文本列表。
PowerShell的創新在于,當使用管道之后所發生的事情。PowerShell允許你將一個對象流從一個cmdlet導向到另一個cmdlet,并且可以修改這些對象的屬性并調用對象上的方法,就好像對象真的傳遞過來一樣。只有當對象最終觸及屏幕的時候文本才會出現。一個cmdlet可以產生表示文件、計算機、服務和網絡對象等對象的一個列表;管道中的一下一個cmdlet可以進行過濾并只是傳遞它感興趣的那些對象;下一個cmdlet可能調用方法在對象上執行操作。這真的是PowerShell的獨特功能。
例如刪除特定目錄下文件
PSD:\ps> dir
目錄: D:\ps
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2017/9/9 17:00 0 1 - 副本 (2).txt
-a--- 2017/9/9 17:00 0 1 - 副本 (3).txt
-a--- 2017/9/9 17:00 0 1 - 副本 (4).txt
-a--- 2017/9/9 17:00 0 1 - 副本.txt
-a--- 2017/9/9 17:00 0 1.txt
PSD:\ps> dir|Remove-Item
PSD:\ps> dir
PSD:\ps>
Dir生成了表示目錄d:\ps的內容的File和Folder對象的一個列表,并且將其傳遞給了remove-item命令,remove-item刪除了傳遞給它的任何對象背后的”真實內容”。
或者可以使用下面的命令。
(dir d:\ps).delete()
它會生成同樣的file和folder對象的流,并且在每個對象上調用delete方法。結果是相同的:文件都刪除掉了。
還可以這樣:
Remove-itemd:\ps\*.*
這將會是最為直接的命令,但是這樣就沒展示出PowerShell和常規命令提示符的區別。
下面是另一個示例,展示了一個管道命令是如何工作的。
PSD:\ps> dir
目錄: D:\ps
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2017/9/9 17:12 0 1.txt
-a--- 2017/9/9 17:12 0 2.txt
PSD:\ps> dir|Where-Object {$_.name -eq "1.txt"}
目錄: D:\ps
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2017/9/9 17:12 0 1.txt
PSD:\ps> dir|Where-Object {$_.name -eq "1.txt"}|remove-it
PSD:\ps> dir
目錄: D:\ps
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2017/9/9 17:12 0 2.txt
PSD:\ps>
Dir針對當前目錄中的每一個文件生成了一個對象,where-Object用于過濾,過濾出文件名為1.txt的對象,并且用remove-item刪除了這個文件。
.NET Framework是微軟對sun的Java編程語言的應對之策。這里包含了一個強大的類庫,可以能夠使用圖形化用戶接口、數據庫訪問、網絡通信、web交互、加密、數值計算等功能。
.NET Framework的所有功能在PowerShell命令行和腳本中都是可用的。
.NET Framework class library在線地址
https://msdn.microsoft.com/zh-cn/library/w0x726c2(v=vs.110).aspx
PowerShell可以運行3種程序:內建命令、外部程序和腳本。
這類似于常規命令提示符環境,在命令提示符中,你可以使用由cmd程序自身處理的內建命令,可以運行外部程序,或者創建批處理文件,批處理文件是組合各種類型的命令來分布執行一個較為復雜的任務。
在PowerShell中,內建命令是cmdlet。然而,和命令提示符shell不同,這些內建的命令沒有固化到PowerShell程序中,而是通過一個插件方法、作為在硬盤上存儲的一個或多個.DLL文件來添加到PowerShell程序中。
因此,定制的cmdlet可以添加到該環境。思路是:Microsoft和第三方可以為他們的應用程序和服務器添加安裝管理cmdlet,以便可以由PowerShell腳本管理它們。例如,Microsoft SQL Sever、Exchange和VMWare服務器擁有定制的cmdlet插件、
開始à所有程序à附件àWindows PowerShell
Windows PowerShell 交互式命令環境
Windows PowerShell ISE 這是一個GUI編輯\調試工具,可以用來開發PowerShell腳本。
Win 7和Windows server 2008R2默認安裝的是v2.0版本
首先要學習的最重要的PowerShell命令,幫助了解其他命令的一個命令:get-help。
Get-help有一個別名help。因此可以互換地使用這些命令名的任何一個。PowerShell有很多內建的幫助。
一些技巧如下:
輸入單詞help來來獲取在線幫助系統的一個快速介紹
PSE:\py> help
主題
Get-Help
簡短說明
顯示有關 Windows PowerShell cmdlet 和概念的幫助。
詳細說明
語法
get-help {<CmdletName> |<TopicName>}
help {<CmdletName> |<TopicName>}
<CmdletName> -?
“Get-help”和“-?”以單頁形式顯示幫助。
“Help”以多頁形式顯示幫助。
示例:
get-help get-process :顯示有關 Get-Process cmdlet 的幫助。
get-help about_signing :顯示有關簽名腳本的幫助。
help where-object :顯示有關 Where-Object cmdlet 的幫助。
help about_foreach :顯示有關 PowerShell 中 foreach 循環的幫助。
set-service -? :顯示有關 Set-Service cmdlet 的幫助。
可以在幫助命令中使用通配符(不使用 -?)。
如果有多個匹配的幫助主題,PowerShell 將顯示匹配主題列表。
如果只有一個匹配的幫助主題,PowerShell 將顯示該主題。
示例:
get-help * :顯示所有幫助主題。
get-help get-* :顯示以 get- 開頭的主題。
help *object* :顯示名稱中包含“object”的主題。
get-help about* :顯示所有概念性主題。
有關通配符的信息,請鍵入:
get-help about_wildcard
備注
若要了解 Windows PowerShell 的有關信息,請閱讀以下幫助主題:
get-command :從 cmdlet 代碼中獲取有關 cmdlet 的信息。
get-member :獲取對象的屬性和方法。
where-object :篩選對象屬性。
about_object :介紹 Windows PowerShell 中對象的用法。
about_remote :說明如何在遠程計算機上運行命令。
概念性幫助文件以“about_<主題>”的形式命名,例如:about_regular_expression。
概念性幫助文件的名稱必須用英文輸入,即使在非英文版 Windows PowerShell 中也是如此。
幫助命令還可顯示 cmdlet 的別名。這些別名是更容易鍵入的代用名或略稱。
例如,Invoke-Command cmdlet 的別名是“remote”。
若要獲得別名,請鍵入:
get-alias
PSE:\py>
在help或get-help后面,你可以輸入一個單詞、cmdlet名稱或部分cmdlet名稱。
也可以輸入用引號括起來的一個短語。
如果有多個主題、多個cmdlet名稱或多個索命與輸入的內容匹配,get-help會打印出所有匹配的幫助條目的一個列表。然后可以輸入help,后面跟著你想要詳細了解的特定條目的名稱。
PSC:\Users\Administrator> Get-Help new
Name Category Synopsis
---- -------- --------
New-WSManInstance Cmdlet 創建管理資源的新實例。
New-WSManSessionOption Cmdlet 創建 WS-Management 會話選項哈希表以用作以下 WS-Management cmdlet 的輸入參數:...
New-PSSession Cmdlet 建立與本地或遠程計算機的持續性連接。
New-PSSessionOption Cmdlet 創建包含 PSSession 高級選項的對象。
New-Module Cmdlet 創建一個僅存在于內存中的新動態模塊。
New-ModuleManifest Cmdlet 創建一個新的模塊清單。
New-Event Cmdlet 創建新事件。
New-Alias Cmdlet 創建新別名。
New-TimeSpan Cmdlet 創建 TimeSpan 對象。
New-Object Cmdlet 創建 Microsoft .NET Framework 或 COM 對象的實例。
New-Variable Cmdlet 創建新變量
New-EventLog Cmdlet 在本地或遠程計算機上創建新事件日志和新事件源。
New-PSDrive Cmdlet 在當前會話中創建 Windows PowerShell 驅動器。
New-Item Cmdlet 創建新項。
New-ItemProperty Cmdlet 為項創建新屬性并設置該屬性的值。例如,可以使用 New-ItemProperty 創建和更改注冊表值和數據,它們是注冊表項的屬性。
New-Service Cmdlet 創建新的 Windows 服務。
New-WebServiceProxy Cmdlet 創建一個 Web 服務代理對象,用于在 Windows PowerShell 中使用和管理 Web 服務。
如果確實有一個名稱或說明包含了輸入的單詞或短語,get-help能夠打印出該主題的幫助信息。
PSC:\Users\Administrator> Get-Help new-ite
Name Category Synopsis
---- -------- --------
New-Item Cmdlet 創建新項。
New-ItemProperty Cmdlet 為項創建新屬性并設置該屬性的值。例如,可以使用 New-ItemProperty 創建和更改注冊表值和數據,它們是注冊表項的屬性。
____________________________________________________________________________________________________________________________________________________________________________________________________________________
PSC:\Users\Administrator> Get-Help new-item
名稱
New-Item
摘要
創建新項。
語法
New-Item [-Path] <string[]>[-Credential <PSCredential>] [-Force] [-ItemType <string>] [-Value<Object>] [-Confirm] [-WhatIf] [-UseTransaction][<CommonParameters>]
New-Item -Name <string> [[-Path]<string[]>] [-Credential <PSCredential>] [-Force] [-ItemType<string>] [-Value <Object>] [-Confirm] [-WhatIf] [-UseTransaction][<CommonParameters>]
說明
New-Item cmdlet 創建新項并設置該項的值。可創建項的類型取決于該項所在位置。例如,在文件系統中,New-Item 用于創建文件和文件夾。在注冊表中,New-Item 用于創建注冊表項和注冊表條目。
此外,New-Item 還可設置它所創建的項的值。例如,創建新文件時,New-Item 可向該文件添加初始內容。
相關鏈接
Online version:http://go.microsoft.com/fwlink/?LinkID=113353
about_Providers
Get-Item
Set-Item
Remove-Item
Clear-Item
Invoke-Item
Rename-Item
Move-Item
Copy-Item
備注
若要查看示例,請鍵入: "get-help New-Item -examples".
有關詳細信息,請鍵入: "get-help New-Item -detailed".
若要獲取技術信息,請鍵入: "get-help New-Item -full".
一些cmdlet有額外幫助信息可以使用。
例如你可以通過輸入help new-alias –examples看到使用new-alias cmdlet的一些示例。
額外信息的常用選項是-examples、-detailed、-full。
幫助文本出現在控制臺窗口中,并且默認地通過more來管道連接的,以便在每一屏只有都會暫停。按下回車鍵繼續下一頁面。
此外,可以比較容易的將幫助信息輸出到一個文件中,>x;然后輸入notepad x來讀取該文本。
有一些幫助條目覆蓋了安裝的cmdlets中的每一個,還有一些關于不同主題的額外文章。
這些文章以about_開頭,例如,help about_execution_policies會打印出關于腳本安全限制系統的信息。
要查看所有這些about條目的一個列表輸入help about。
要根據cmdlet所做的工作的說明中的單詞來找到cmdlet,以及當你已經找到感興趣的一個cmdlet后要了解其命令行語法的話,在線幫助系統很好用。
在線幫助語法說明
[]方括號表示可選的命令參數
{}花括號通常表示可以從中選擇一系列選項,選項之間帶有一個垂直線|。
<>尖括號括起來的值是必須自己提供的。
例如[-Description <string>]表示一個可選的參數。可以忽略它,或者,輸入類似-description “some text”的內容。也可以將其省略為-descr “sometext”。
(1)、獲取別名列表
通過輸入alias來看到所有內建別名的一個列表。Alias也是get-alias的別名
PSC:\Users\Administrator> alias
CommandType Name Definition
----------- ---- ----------
Alias % ForEach-Object
Alias ? Where-Object
Alias ac Add-Content
Alias asnp Add-PSSnapIn
Alias cat Get-Content
Alias cd Set-Location
Alias chdir Set-Location
Alias clc Clear-Content
Alias clear Clear-Host
Alias clhy Clear-History
Alias cli Clear-Item
Alias clp Clear-ItemProperty
Alias cls Clear-Host
Alias clv Clear-Variable
Alias compare Compare-Object
Alias copy Copy-Item
Alias cp Copy-Item
Alias cpi Copy-Item
Alias cpp Copy-ItemProperty
Alias cvpa Convert-Path
Alias dbp Disable-PSBreakpoint
Alias del Remove-Item
Alias diff Compare-Object
Alias dir Get-ChildItem
Alias ebp Enable-PSBreakpoint
Alias echo Write-Output
Alias epal Export-Alias
Alias epcsv Export-Csv
Alias epsn Export-PSSession
Alias erase Remove-Item
Alias etsn Enter-PSSession
Alias exsn Exit-PSSession
Alias fc Format-Custom
Alias fl Format-List
Alias foreach ForEach-Object
Alias ft Format-Table
Alias fw Format-Wide
Alias gal Get-Alias
Alias gbp Get-PSBreakpoint
Alias gc Get-Content
Alias gci Get-ChildItem
Alias gcm Get-Command
Alias gcs Get-PSCallStack
Alias gdr Get-PSDrive
Alias ghy Get-History
Alias gi Get-Item
Alias gjb Get-Job
Alias gl Get-Location
Alias gm Get-Member
Alias gmo Get-Module
Alias gp Get-ItemProperty
Alias gps Get-Process
Alias group Group-Object
Alias gsn Get-PSSession
Alias gsnp Get-PSSnapIn
Alias gsv Get-Service
Alias gu Get-Unique
Alias gv Get-Variable
Alias gwmi Get-WmiObject
Alias h Get-History
Alias history Get-History
Alias icm Invoke-Command
Alias iex Invoke-Expression
Alias ihy Invoke-History
Alias ii Invoke-Item
Alias ipal Import-Alias
Alias ipcsv Import-Csv
Alias ipmo Import-Module
Alias ipsn Import-PSSession
Alias ise PowerShell_ise.exe
Alias iwmi Invoke-WMIMethod
Alias kill Stop-Process
Alias lp Out-Printer
Alias ls Get-ChildItem
Alias man help
Alias md mkdir
Alias measure Measure-Object
Alias mi Move-Item
Alias mount New-PSDrive
Alias move Move-Item
Alias mp Move-ItemProperty
Alias mv Move-Item
Alias nal New-Alias
Alias ndr New-PSDrive
Alias ni New-Item
Alias nmo New-Module
Alias nsn New-PSSession
Alias nv New-Variable
Alias ogv Out-GridView
Alias oh Out-Host
Alias popd Pop-Location
Alias ps Get-Process
Alias pushd Push-Location
Alias pwd Get-Location
Alias r Invoke-History
Alias rbp Remove-PSBreakpoint
Alias rcjb Receive-Job
Alias rd Remove-Item
Alias rdr Remove-PSDrive
Alias ren Rename-Item
Alias ri Remove-Item
Alias rjb Remove-Job
Alias rm Remove-Item
Alias rmdir Remove-Item
Alias rmo Remove-Module
Alias rni Rename-Item
Alias rnp Rename-ItemProperty
Alias rp Remove-ItemProperty
Alias rsn Remove-PSSession
Alias rsnp Remove-PSSnapin
Alias rv Remove-Variable
Alias rvpa Resolve-Path
Alias rwmi Remove-WMIObject
Alias sajb Start-Job
Alias sal Set-Alias
Alias saps Start-Process
Alias sasv Start-Service
Alias sbp Set-PSBreakpoint
Alias sc Set-Content
Alias select Select-Object
Alias set Set-Variable
Alias si Set-Item
Alias sl Set-Location
Alias sleep Start-Sleep
Alias sort Sort-Object
Alias sp Set-ItemProperty
Alias spjb Stop-Job
Alias spps Stop-Process
Alias spsv Stop-Service
Alias start Start-Process
Alias sv Set-Variable
Alias swmi Set-WMIInstance
Alias tee Tee-Object
Alias type Get-Content
Alias where Where-Object
Alias wjb Wait-Job
Alias write Write-Output
(2)、定義別名
可以輸入下面的命令來定義一個新的別名:
New-alias -nameshortname –value realcommandname –description “Brief description”
當關閉PowerShell窗口的時候,別名定義不再繼續存在。下一次運行PowerShell的時候,定制的別名將不復存在了。
如果想要保存別名,可以通過配置文件的形式實現。
可以通過添加定制的別名、把目錄添加到路徑-環境變量,來定制符合自己偏好的PowerShell環境。因此每次啟動PowerShell的時候,如果必須重新輸入這些命令,簡直是一種痛苦。個腳本
PowerShell的配置文件是每次啟動一個新的實例的時候,PowerShell所運行的命令的一個腳本。
事實上,無論何時,以何種形式啟動PowerShell,它都會在如下兩個位置查找配置文件腳本:
C:\Windows\system32\WindowsPowerShell\v1.0\
C:\Users\username\Documents\WindowsPowerShell\
先查找一個名叫profile.ps1的腳本,如果找到就運行它。
命令行PowerShell隨后查找一個名叫Microsoft.PowerShell_profile.ps1的配置文件腳本,如果找到就執行它。
GUI PowerShell ISE程序首先查找profile.ps1,然后查找Microsoft.PowerShellISE_profile.ps1。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。