1. 程式人生 > >更好的批處理指令碼語言 PowerShell

更好的批處理指令碼語言 PowerShell

微軟在 2006 年推出首款 PowersShell 1.0 版本,適用於 Windows Server 2008 作業系統,並作為 PowersShell 2.0 被正式預裝在之後的 Windows 7 作業系統中。在 Windows 8 中,內建的 PowerShell 更進一步,升級為 PowerShell 3.0,Windows 8.1 則對應著 PowerShell 4.0 版本。在我寫下本段文字,PowerShell 已經迎來了它的另一個新版本 PowerShell 6.0。這些變化背後,離不開它強大的開源支援。你可以在 Github 找到它的開原始碼。

PowerShell 跨平臺,這意味著你可以將編寫好的程式碼用來管理 Windows、Macintosh,甚至是 Linux 作業系統。這一點是 Windows 下的原始批處理檔案(batch file)所不能比擬的。

cmdlet

cmdlet(中譯名 “短命令”)是 PowerShell 命令體系的基礎。

動詞-名詞

這是 cmdlet 的基本語法結構。cmdlet 是一個內建到 shell 中的簡單的單一功能命令列工具。可以就像使用傳統的命令和實用工具那樣使用 cmdlet。首先在 Windows PowerShell 命令提示符下鍵入 cmdlet 的名稱。Windows PowerShell 命令不區分大小寫,因此可以用任意大小寫鍵入。

在這裡插入圖片描述

0x00:相容 Linux 命令

PowerShell 將一些命令做了別名處理,以取悅那些 Linux 專家的習慣。常見的如 ls 命令,你也可以用 dir

gci 命令進行呼叫。

在這裡插入圖片描述

當然,你還可以使用 tree 命令將結果以檔案樹的形式輸出。

在這裡插入圖片描述

0x01:檢視幫助文件

類似 Linux 的 man 命令,PowerShell 有一個名為 get-help 的命令。

在這裡插入圖片描述

0x02:列出所有程序或服務

使用 get-process 段命令列出本地機器上的所有程序。它是 ps 命令的別名。

在這裡插入圖片描述

使用 get-service 短命令列出本地機器上的所有服務,包括停止和正在執行的。

在這裡插入圖片描述

0x03:輸出結果篩選

類似 Linux 的 grep 命令,PowerShell 有一個 select-string 命令。

在這裡插入圖片描述

0x04:清屏

使用 clear-host 短命令、cls 命令,或 clear 命令進行終端清屏。

在這裡插入圖片描述

0x05:新建專案

這是 PowerShell 的一個特色命令。它不僅可以在制定路徑建立檔案、資料夾,還可以創建制定型別的檔案系統;在登錄檔中,New-Item 建立登錄檔項和條目。

在這裡插入圖片描述

編寫並執行 PowerShell 指令碼

PowerShell 指令碼的欽定的檔案字尾名為 .ps1,s 後面跟的是數字 1。

在這裡插入圖片描述

儲存為字尾為 .ps1 的指令碼檔案即可。只要你的操作主機安裝了 PowerShell,就可以執行執行。如果直接 .\檔名 會報錯。因為 PowerShell 預設禁止在終端執行指令碼程式。對此我們有一條命令用來繞過執行該指令碼。

powershell.exe -ExecutionPolicy Bypass -File 檔名.ps1

在這裡插入圖片描述

在 CMD 下執行亦可。注意命令字首 powershell.exe 必不可少。

在這裡插入圖片描述

如果嫌麻煩,可以永久的改變本機的 PowerShell 執行策略。

Set-ExecutionPolicy Bypass

和上面的單獨繞過不同,該操作必須具有管理員許可權,否則會報錯。

在這裡插入圖片描述

和登錄檔愉快的玩耍

PowerShell 的另一個吸引人的特性是,它允許你直接在終端裡,像訪問普通的檔案系統那樣訪問 Windows 登錄檔。記住,我們直接訪問的是鍵,它相當於普通檔案系統的目錄,而它其下包含的值和普通意義上的檔案有一些區別,所謂的值顯示在屬性欄,與其他屬性一同組成一個完整的值。

我們知道,檔案系統的檔案物件具有三大屬性:所謂讀、寫、執行許可權。只要是和鍵的讀取有關的,在 PowerShell 的登錄檔互動中都可以像普通檔案一樣的互動。讀的屬性,比如:列出某鍵下的所有子鍵,這時候你就應該想到 ls 命令。當然更規範的寫法應該是 get-childitem 短命令。

短命令 作用 別名
Get-ChildItem 列出某鍵的所有子鍵 ls, dir
Get-ItemProperty 列出某鍵的所有屬性 -
Set-Location 更改當前操作的鍵 cd
Set-ItemProperty 更改某鍵的某值 -
New-ItemProperty 給某鍵新建一個值 -
Clear-ItemProperty 刪除某鍵的值的內容 -
Remove-ItemProperty 刪除某鍵的值 -
New-Item 建立一個新鍵 md
Remove-Item 刪除一個鍵 del
Test-Path 驗證某鍵是否存在 -

在這裡插入圖片描述