什麼是 Windows PowerShell?它與什麼一起使用? 第 1 部分:主要特性

從歷史上看,Unix 系統上的命令行實用程序比 Windows 上的開發得更好,但隨著新解決方案的出現,情況發生了變化。

Windows PowerShell 允許系統管理員自動執行大多數日常任務。 使用它,您可以更改設置、停止和啟動服務,還可以對大多數已安裝的應用程序執行維護。 將藍色窗口視為另一個命令解釋器是錯誤的。 這種做法並沒有體現微軟提出的創新的本質。 事實上,Windows PowerShell 的可能性要廣泛得多:在一系列簡短的文章中,我們將嘗試找出 Microsoft 解決方案與我們更熟悉的工具有何不同。

什麼是 Windows PowerShell?它與什麼一起使用? 第 1 部分:主要特性

主要特點 

當然,Windows PowerShell 主要是一個腳本 shell,最初構建在 .NET Framework 上,後來構建在 .NET Core 上。 與接受和返回文本數據的 shell 不同,Windows PowerShell 使用具有屬性和方法的 .NET 類。 PowerShell 允許您運行常見命令,還允許您訪問 COM、WMI 和 ADSI 對象。 它使用各種存儲(例如文件系統或 Windows 註冊表)來訪問所謂的。 提供商。 值得注意的是,可以在其他應用程序中嵌入 PowerShell 可執行組件來實現各種操作,包括。 通過圖形界面。 反之亦然:許多 Windows 應用程序通過 PowerShell 提供對其管理界面的訪問。 

Windows PowerShell 允許您:

  • 更改操作系統設置;
  • 管理服務和流程;
  • 配置服務器角色和組件;
  • 安裝軟件;
  • 通過特殊接口管理已安裝的軟件;
  • 在第三方程序中嵌入可執行組件;
  • 創建腳本以自動執行管理任務;
  • 使用文件系統、Windows 註冊表、證書存儲等。

Shell和開發環境

Windows PowerShell 以兩種形式存在:除了帶有命令 shell 的控制台模擬器之外,還有集成腳本環境 (ISE)。 要訪問命令行界面,只需從 Windows 菜單中選擇適當的快捷方式或從“運行”菜單運行 powershell.exe。 屏幕上會出現一個藍色窗口,其功能與上古的 cmd.exe 明顯不同。 Unix 系統的命令 shell 用戶熟悉自動完成和其他功能。

什麼是 Windows PowerShell?它與什麼一起使用? 第 1 部分:主要特性

要使用 shell,您需要記住一些鍵盤快捷鍵:

  • 向上和向下箭頭滾動歷史記錄以重複以前鍵入的命令;
  • 行尾的右箭頭逐個字符地重新輸入上一個命令;
  • Ctrl+Home 刪除從光標位置到行首鍵入的文本;
  • Ctrl+End 刪除從光標到行尾的文本。

F7 顯示一個包含鍵入命令的窗口,並允許您選擇其中之一。 該控制台還可以使用鼠標進行文本選擇、複製粘貼、光標定位、刪除、退格——一切我們喜歡的。

什麼是 Windows PowerShell?它與什麼一起使用? 第 1 部分:主要特性
Windows PowerShell ISE 是一個完整的開發環境,具有選項卡式和語法突出顯示的代碼編輯器、命令生成器、內置調試器和其他編程樂趣。 如果您在開發環境編輯器中的命令名稱後添加連字符,您將在下拉列表中獲得所有可用選項以及類型指示。 您可以通過系統菜單中的快捷方式或使用可執行文件 powershell_ise.exe 啟動 PowerShell ISE。

什麼是 Windows PowerShell?它與什麼一起使用? 第 1 部分:主要特性

cmdlet 

在 Windows PowerShell 中,即所謂的。 cmdlet。 這些是提供各種功能的專用 .NET 類。 它們被命名為動作-賓語(或者動詞-名詞,如果您願意的話),連字符分隔的鏈接類似於自然語言句子中的謂語和主語。 例如,Get-Help 字面意思是“Get-Help”,或者在 PowerShell 上下文中:“Show-Help”。 事實上,這類似於 Unix 系統中的 man 命令,並且必須以這種方式請求 PowerShell 中的手冊,而不是通過使用 --help 或 /? 鍵調用 cmdlet。不要忘記在線 PowerShell 文檔:微軟已經說得很詳細了。

除了 Get 之外,cmdlet 還使用其他動詞來表示操作(嚴格來說,不僅僅是動詞)。 在下面的列表中,我們給出了一些示例:

Add - 添加;
Clear - 清除;
Enable - 打開;
Disable - 關掉;
New - 創造;
Remove - 刪除;
Set - 問;
Start - 跑步;
Stop - 停止;
Export - 出口;
Import - 進口。

有系統、用戶和可選 cmdlet:作為執行結果,它們都返回一個對像或對像數組。 它們不區分大小寫,即從命令解釋器的角度來看,Get-Help 和 get-help 之間沒有區別。 字符“;”用於分隔,但僅當多個 cmdlet 在同一行上執行時才必須使用該字符。 

Windows PowerShell cmdlet 分為模塊(NetTCPIP、Hyper-V 等),並且有一個 Get-Command cmdlet 可按對象和操作進行搜索。 您可以像這樣顯示它的幫助:

Get-Help Get-Command

什麼是 Windows PowerShell?它與什麼一起使用? 第 1 部分:主要特性

默認情況下,該命令顯示簡短的幫助,但參數(參數)會根據需要傳遞給 cmdlet。 例如,在他們的幫助下,您可以獲得詳細(參數 -Detailed)或完整(參數 -Full)幫助,以及顯示示例(參數 -Examples):

Get-Help Get-Command -Examples

Windows PowerShell 中的幫助由 Update-Help cmdlet 更新。 如果命令行太長,可以通過寫入服務字符“`”並按 Enter 鍵將 cmdlet 參數移動到下一行 - 僅在一行上完成命令寫入並繼續在另一行上是行不通的。

以下是一些常見 cmdlet 的示例: 

Get-Process - 顯示系統中正在運行的進程;
Get-Service — 顯示服務及其狀態;
Get-Content - 顯示文件的內容。

對於常用的 cmdlet 和外部實用程序,Windows PowerShell 有簡短的同義詞 - 別名(來自英語. Alias)。 例如,dir 是 Get-ChildItem 的別名。 同義詞列表還包括來自 Unix 系統的類似命令(ls、ps 等),並且 Get-Help cmdlet 由 help 命令調用。 可以使用 Get-Alias cmdlet 查看完整的同義詞列表:

什麼是 Windows PowerShell?它與什麼一起使用? 第 1 部分:主要特性

腳本、函數、模塊和 PowerShell 語言

Windows PowerShell 腳本存儲為擴展名為 .ps1 的純文本文件。 您無法通過雙擊來啟動它們:您需要右鍵單擊以調出上下文菜單並選擇“在 PowerShell 中運行”項。 在控制台中,您必須指定腳本的完整路徑,或者轉到適當的目錄並寫入文件名。 運行腳本也受到系統策略的限制,要檢查當前設置,您可以使用 Get-ExecutionPolicy cmdlet,它將返回以下值之一:

Restricted — 啟動腳本被禁用(默認情況下);
AllSigned - 只允許啟動由受信任的開發人員簽名的腳本;
RemoteSigned - 允許運行簽名的和自己的腳本;
Unrestricted - 允許運行任何腳本。

管理員有兩個選擇。 最安全的方法是簽署腳本,但這是一個相當嚴重的巫術 - 我們將在以後的文章中處理它。 現在讓我們採取阻力最小的路徑並改變策略:

Set-ExecutionPolicy RemoteSigned

什麼是 Windows PowerShell?它與什麼一起使用? 第 1 部分:主要特性
儘管您可以使用特殊設置更改當前用戶的策略,但需要以管理員身份運行 PowerShell 才能執行此操作。

腳本是用面向對象的編程語言編寫的,其命令的命名原則與前面討論的 cmdlet 相同:“動作-對象”(“動詞-名詞”)。 它的主要目的是自動化管理任務,但它是一種成熟的解釋語言,具有所有必要的結構:條件跳轉、循環、變量、數組、對象、錯誤處理等。 任何文本編輯器都適合編寫腳本,但最好運行 Windows PowerShell ISE。

您可以將參數傳遞給腳本,使它們成為必需的,並設置默認值。 此外,Windows PowerShell 允許您使用 Function 構造和花括號,以與 cmdlet 相同的方式創建和調用函數。 具有函數的腳本稱為模塊,並具有 .psm1 擴展名。 模塊必須存儲在 PowerShell 環境變量中定義的目錄中。 您可以使用以下命令查看它們:

Get-ChildItem Env:PSModulePath | Format-Table -AutoSize

輸送機

在上一個示例中,我們使用了 Unix shell 用戶熟悉的構造。 在 Windows PowerShell 中,豎線還允許您將一個命令的輸出傳遞到另一個命令的輸入,但管道的實現存在顯著差異:我們不再討論一組字符或某種類型的字符。文本。 內置 cmdlet 或用戶定義的函數返回對像或對像數組,並且還可以接收它們作為輸入。 與 Bourne shell 及其許多後繼者一樣,PowerShell 通過管道使復雜的任務變得更加容易。

最簡單的管道示例如下所示:

Get-Service | Sort-Object -property Status

什麼是 Windows PowerShell?它與什麼一起使用? 第 1 部分:主要特性
首先,執行 Get-Service cmdlet,然後將其接收的所有服務傳遞給 Sort-Object cmdlet,以便按 Status 屬性進行排序。 管道上一部分的結果傳遞給哪個參數取決於其類型 - 通常是 InputObject。 此問題將在專門介紹 PowerShell 編程語言的文章中更詳細地討論。 

如果您願意,可以繼續該鏈並將 Sort-Object 操作的結果傳遞給另一個 cmdlet(它們將從左到右執行)。 順便說一句,Windows 用戶還可以訪問所有 Unixoid 都熟悉的分頁結構: 

Get-Service | Sort-Object -property Status | more

在後台運行任務 

很多時候,需要在後台運行某個命令,以免在 shell 會話中等待其執行結果。 Windows PowerShell 有幾個適用於這種情況的 cmdlet:

Start-Job - 啟動後台任務;
Stop-Job — 停止後台任務;
Get-Job — 查看後台任務列表;
Receive-Job — 查看後台任務執行結果;
Remove-Job — 刪除後台任務;
Wait-Job - 將後台任務傳輸回控制台。

要啟動後台任務,我們使用 Start-Job cmdlet 並在大括號中指定一個命令或一組命令:

Start-Job {Get-Service}

什麼是 Windows PowerShell?它與什麼一起使用? 第 1 部分:主要特性
Windows PowerShell 中的後台任務可以通過了解其名稱來進行操作。 首先,讓我們學習如何顯示它們:

Get-Job

什麼是 Windows PowerShell?它與什麼一起使用? 第 1 部分:主要特性
現在讓我們展示作業 Job1 的結果:

Receive-Job Job1 | more

什麼是 Windows PowerShell?它與什麼一起使用? 第 1 部分:主要特性
一切都很簡單。

遠程命令執行

Windows PowerShell 不僅允許您在本地計算機上執行命令和腳本,還可以在遠程計算機上甚至在整個計算機組上執行命令和腳本。 做這件事有很多種方法:

  • 許多 cmdlet 都有一個參數 -ComputerName,但這樣就行不通了,例如創建一個傳送帶;
  • cmdlet Enter-PSSession 允許您在遠程計算機上創建交互式會話; 
  • 使用 cmdlet Invoke-Command 您可以在一台或多台遠程計算機上運行命令或腳本。

PowerShell 的版本

自 2006 年首次發布以來,PowerShell 發生了很大變化。 該工具適用於在不同硬件平台(x86、x86-64、Itanium、ARM)上運行的許多系統:Windows XP、Windows Server 2003、Windows Vista、Windows Server 2008/2008 R2、Windows 7、Windows 8、Windows 8.1 、 Windows RT、Windows RT 8.1、Windows Server 2012/2012 R2、Windows 10、Windows Server 2016、GNU/Linux 和 OS X。最新版本 6.2 於 10 年 2018 月 XNUMX 日發布。 為早期版本編寫的腳本可能適用於更高版本,但向後移植可能會出現問題,因為 PowerShell 在多年的開發過程中引入了大量新的 cmdlet。 您可以使用 $PSVersionTable 內置變量的 PSVersion 屬性找出計算機上安裝的命令 shell 的版本:

$PSVersionTable.PSVersion

什麼是 Windows PowerShell?它與什麼一起使用? 第 1 部分:主要特性
您還可以使用 cmdlet:

Get-Variable -Name PSVersionTable –ValueOnly

什麼是 Windows PowerShell?它與什麼一起使用? 第 1 部分:主要特性
使用 Get-Host cmdlet 也可以完成相同的操作。 事實上,有很多選擇,但要使用它們,您需要學習 PowerShell 編程語言,我們將在 下一篇文章

結果 

Microsoft 已成功創建了一個真正強大的 shell,具有用於開發腳本的便捷集成環境。 它與我們在 Unix 世界中熟悉的工具不同,它與 Windows 系列操作系統及其軟件和 .NET Core 平台深度集成。 PowerShell 可以稱為面向對象的 shell,因為 cmdlet 和用戶定義的函數返回對像或對像數組,並可以將它們作為輸入。 我們認為 Windows 上的所有服務器管理員都應該擁有這個工具:他們不需要命令行的時代已經過去了。 特別需要高級控制台 shell 我們運行 Windows Server Core 的低成本 VPS,但那是一個完全不同的故事。

什麼是 Windows PowerShell?它與什麼一起使用? 第 1 部分:主要特性

只有註冊用戶才能參與調查。 登入, 請。

該系列的下一篇文章應首先討論哪些主題?

  • 企業排放佔全球 53,2%在 PowerShell 中編程123

  • 企業排放佔全球 42,4%PowerShell98函數和模塊

  • 企業排放佔全球 22,1%如何簽署自己的腳本?51

  • 企業排放佔全球 12,1%通過提供商(providers)使用存儲庫28

  • 企業排放佔全球 57,6%使用 PowerShell 自動化計算機管理133

  • 企業排放佔全球 30,7%軟件管理和在第三方產品中嵌入 PowerShell 可執行文件71

231 位用戶投票。 37 名用戶棄權。

來源: www.habr.com

添加評論