什麼是 Windows PowerShell 腳本?
### 快速鏈接
⭐PowerShell 腳本概述
⭐Cmdlet 詳細信息
⭐PowerShell參數解釋
⭐創建管道
⭐將管道另存為 PS1 腳本
⭐PowerShell 也可在 Linux 和 macOS 上使用
要點
PowerShell 是一種多功能且功能強大的腳本語言,旨在促進各種計算過程的自動化,透過使用戶能夠在統一的環境中執行命令和執行操作,為使用者提供簡化工作流程的有效方法。
Powershell 命令(稱為 cmdlet)每個都具有單一功能。命令“Get-Command”使人們能夠仔細閱讀一系列可訪問的 cmdlet。
PowerShell 可在多種作業系統上使用,包括 Windows、macOS 和 Linux。
PowerShell 是一種多功能腳本語言,專為在基於 Windows 的系統上輕鬆、高效且可靠地自動化執行各種計算任務而設計。了解如何透過建立滿足您的特定要求的客製化腳本來利用其功能。
PowerShell 腳本概述
要開始在 Windows 作業系統上編寫基本的 PowerShell 腳本,必須了解三個基本概念:
⭐ Cmdlet:單一功能指令。
參數用於描述有關 Cmdlet 或命令執行的具體細節,包括其目的、時間、位置和方法。這些參數為以受控且精確的方式執行任務提供了必要的指導。
管道是 PowerShell 中的一項強大功能,可讓您將一個命令或函數的輸出作為輸入傳遞給另一個命令或函數,從而建立鏈狀結構。透過利用此功能,您可以透過將多個命令連接在一起輕鬆建立複雜的腳本編寫任務,從而實現高效的自動化和簡化的工作流程。
透過利用所有三個組件,可以創建用戶友好的腳本,透過自動化簡化各種流程。
在此範例中,我們示範如何整合多個 PowerShell cmdlet 以實現特定目標。這些命令的序列被稱為“管道”,其中每個單獨的命令處理資料並將其傳遞到下一個命令,直到實現所需的結果。這種方法使用戶能夠透過簡化工作流程並減少人工幹預,以更高的效率執行複雜的操作。
為了使用 PowerShell 執行這一系列操作,可以使用類似以下的命令:
Get-Object Potato | Peel-Object | Chop-Object Chips| Cook-Object DeepFry `
| Place-Object Bowl
Cmdlet 詳細信息
PowerShell 配備了一組內建命令,使用戶能夠操縱系統物件並執行大量操作。 PowerShell 中的這些核心指令稱為 Cmdlet。
PowerShell 使用稱為 cmdlet 的特定類型的命令,這些命令結構緊湊,並在.dll 副檔名的幫助下執行單一功能。這些微型程式單元具有編譯簡潔的優勢,與更全面的函數相比,執行速度更快。
利用 PowerShell 提供了廣泛的指令,包含眾多功能。沒有必要精通每一個命令;相反,建議從獲取基礎知識開始,並在整個腳本編寫經驗中逐步擴展這些知識。為了仔細閱讀系統上目前安裝的命令列介面 (CLI) 命令,請執行以下指令:
Get-Command
仔細閱讀結果後,人們可以看出它們遵循一種動詞-名詞結構的模式。這樣的安排有利於理解特定Cmdlet的功能。
Powershell 提供了各種內建 cmdlet 來執行不同的任務。 Get-Command 指令傳回 Powershell 中所有可用指令的陣列。同樣,Get-Process 命令檢索有關係統上正在運行的進程的資訊。此外,Copy-Item cmdlet 允許使用者將一個或多個檔案從一個位置傳輸到另一個指定的目標資料夾。
命令列工具附有全面的文檔,其中包括說明性範例、詳細的使用指南以及與其功能相關的深入解釋。
要獲取有關特定 Cmdlet 及其用法的更多信息,執行以下命令將為您提供全面的詳細信息:
Get-Help <name-of-cmdlet>
PowerShell 參數解釋
透過使用參數,可以以不同程度的特異性執行 PowerShell 命令。這些參數允許透過指定目標、時間、位置和方法等因素來更好地控制 Cmdlet 和功能的執行。
一個例子是透過使用命令「Get-Process」來取得作業系統中目前活動進程的清單。
為了透過利用命令列參數來取得特定進程,可以將「Name」屬性與「Get-Process」cmdlet結合使用。舉例來說,要檢索 Slack 應用程式的所有實例,使用者可以輸入以下命令:mathematicaGet-Process-Name “ Slack
Get-Process -Name Slack
執行命令後,您將看到帶有“slack”標籤的進程清單。
某些變數具有稱為「位置性」的特徵,即它們的指定是強制的還是可選的,由上下文而不是由顯式標籤決定。例如,當呼叫命令「Get-Process-Name Slack」時,省略參數標題會導致將其包含為位置,從而允許在給定上下文中理解它,而無需特定標籤。類似地,當執行命令「Get-Process Slack」時,參數的缺乏規範也會使其成為位置性的,從而使其能夠根據周圍的情況來理解,而不需要形式化的標識符。
每個 Commandlet 都有自己的一組可接受的輸入參數,可以透過使用 Get-Help 命令並導航到該特定 Commandlet 的語法部分來查看這些參數。
Get-Help Get-Process
您將看到一系列用於執行指定命令的可用方法,其中包含各種參數和選項。
在這種情況下,Get-Process cmdlet 能夠接受各種輸入參數,包括但不限於名稱、Id、ComputerName、Module 和 FileVersionInfo 等。這些參數表示可以與 Get-Process cmdlet 結合使用的各種屬性,以檢索有關電腦系統上執行的進程的資訊。
象徵
|
姓名
|
意義
—|—|— |
空白的
|
參數不接受輸入
-
|
連字符
|
表示參數名稱
|
斜角支架
|
文字佔位符
[]
|
括號
|
能夠容納多個值的參數(通常稱為變數或欄位)表示可以在程式執行期間更改並可能對其輸出或行為產生影響的元素。
{}
|
牙套
|
參數接受一組值
某些參數將指定預期的輸入類型,包括字串、整數、布林值和日期。為了說明這一點,請考慮以下程式碼片段:
Get-Process [[-Name] <string[]>]
Name 參數能夠容納多個字串值,而相反,上述約束限制它僅接受單一值。
Get-Process -Id <int[]>
「Id」參數被設計為接受一個或多個整數值,這些值可用於程式設計應用程式中的各種目的。
為了進一步細化進程搜尋並獲得更精確的結果集,可以利用 PowerShell 指令「Get-Process」中的「ID」參數。此特定參數需要輸入整數值,如其語法所指定。透過將此參數合併到命令中,使用者可以在可用選項清單中找出更準確的過程。
Get-Process -Id 3016
隨後,您將觀察到枚舉中的單一實例:
建立管道
PowerShell 將資訊視為實體處理,這些實體透過一系列透過管道符號 (|) 互連的命令或函數進行組織。選擇適當的命令列開關並利用管道以連貫的方式排列它們對於製作高效的腳本至關重要。
以下是一個範例,說明如何使用 Python 建立一個簡單的腳本,根據給定目錄中的大小排序並顯示前 5 個最大的檔案:pythonimport osimport Shutildef get_largest_files(directory):# Get list of all files in the directoryfile_list=os.listdir(directory)# 依檔案大小(以位元組為單位)對清單進行排序sorted_by_size=sorted(file_list, key=os.path.getsize,verse=True)# 僅傳回排序清單的前n個元素returnsorted_by_size [:5 ]# 用法範例:directory=’/path/to/your/folder/’top_
人們可以利用 PowerShell 中的管道配置來完成此任務,該管道展示了特定的結構。所述管道由各種組件組成,這些組件協同工作以實現預期結果。
Get-ChildItem -Path "C:\Directory" -File | Sort-Object Length -Descending `
| Select-Object -First 5 | Format-Table Name, Length -AutoSize
將管道另存為 PS1 腳本
為了確保效率和易於訪問,您可能希望透過將其轉換為 PowerShell 腳本 (.ps1) 檔案來保存操作管道以供將來使用。這將消除每次使用管道時重複手動輸入的需要。
產生 PowerShell 腳本 (PS1) 檔案的簡單方法是將所需腳本直接貼上到文字編輯器(例如記事本)中,然後使用「.ps1」檔案副檔名儲存。
若要在 PowerShell 中使用 PS1 腳本,請執行指令“./ScriptName.ps1”,後面接著一個冒號。
若要解決執行腳本時可能出現的任何權限問題,建議使用管理權限執行 PowerShell。這可以透過啟動提升的 PowerShell 會話,然後繼續在此上下文中執行腳本來完成。
恭喜,您現在能夠編寫 PowerShell PS1 腳本了。
##PowerShell 也可在 Linux 和 macOS 上使用
由於其用戶友好的介面和廣泛的功能,PowerShell 已成為備受追捧的初學者腳本語言。在此之前,它是 Windows 生態系統獨有的;然而,最近的更新使得 PowerShell 可以跨各種平台使用,例如 macOS 和多個 Linux 發行版。這項擴充功能進一步增強了 PowerShell 的多功能性,使用戶能夠在不同作業系統之間無縫過渡其技能。