PowerShell 以及您需要了解的有關此實用程式的所有信息

如果您的電腦能夠幫您處理這些日常瑣事,會怎麼樣?有了 Windows PowerShell,它就能做到。以下是如何利用 PowerShell 自動執行那些沒人願意一再重複的日常任務。

目錄

什麼是 PowerShell?

Microsoft PowerShell 是一款命令列實用程式和腳本語言,它是一款強大的工具,可協助管理員自動執行各種電腦和網路任務。 PowerShell 包含命令提示字元的元件,並基於 .NET 框架建置。如果您正在閱讀有關 WebTech360 的文章,您應該知道 PowerShell 是 IT 管理員管理大型網路的首選工具。

學習如何使用 PowerShell 將簡化許多繁瑣的日常任務。您也可以透過網路進行系統範圍的更改,而無需單獨配置每台伺服器。 PowerShell 正成為運作混合雲環境的重要組成部分。

PowerShell 用途廣泛,可協助您提高工作效率,並保持網路高效運作。最基本的用途包括:安排系統每日更新、產生目前進程報告、定期服務等等。雖然許多任務都可以透過 GUI 完成,但 PowerShell 的重點在於提高執行速度。

如果您有一項例行維護任務需要幾分鐘才能完成設置,您可以將相同的功能編寫成名為 PowerShell 的命令。這樣,下次打開該腳本時,它將在背景運行。掌握 PowerShell 腳本邏輯,理解物件、var(變數)的工作原理,並在網路中智慧地部署它,您會後悔自己為什麼沒有早點使用 PowerShell。

本教學將介紹 PowerShell 的基礎知識,這對 IT 新手(尤其是熟悉 Windows 命令提示字元的新手)將大有裨益。本教學將講解如何使用基本工具和命令、如何處理文件和資料夾、理解物件、使用變數以及如何管理遠端伺服器。

Windows 命令列實用程式簡史

Windows NT 發布後,CMD.EXE 成為 Windows 的命令列實用程式。儘管 CMD.EXE 繼承了其 DOS 前身(COMMAN.COM)的一些元素,但它仍然基於相當「原始」的腳本語言:使用 Windows 命令檔(.CMD 和 .BAT)。 Windows Scripting Host 以及 VBScript 和 JScript 語言的加入大大增強了該實用程式的腳本功能。

這些技術是高階命令列實用程式和腳本環境的均衡組合。真正的問題不在於它們可以操作多少個 CMD.EXE、.CMD 和 Windows Scripting Host 檔案。主要的抱怨和擔憂在於如何完成一些看似簡單的任務。

使用命令列和腳本工具的“框架”,任何中等程度的腳本都需要結合批次命令、Windows Scripting Host 和獨立的可執行檔。每個腳本使用不同的約定來執行和請求、解析和傳回資料。

CMD.EXE 變數支援不佳、介面不一致、Windows 設定存取權限受限,再加上另一個弱點,使得命令列腳本難以實現和使用。你可能會問,這個「另一個弱點」是什麼?是文本。在這些技術中,一切都是文本。命令或腳本的輸出是文本,必須經過解析和重新格式化才能作為下一個命令的輸入。這是 PowerShell 從所有傳統 Shell 中藉鏡的基本出發點。

PowerShell 工具、指令與模組簡介

本節介紹的三個概念只是理解構成 PowerShell 基礎的關鍵概念的基礎知識。隨著您逐漸熟悉 PowerShell 指令,您將需要花費更多時間學習並掌握更進階的概念。

PowerShell 工具

Windows 10、Windows 7、Windows Server 2008 R2 及更高版本的 Windows 系統預設安裝 PowerShell。新版 PowerShell 新增了新功能和「cmdlet」(微軟對 PowerShell 命令的稱呼,發音為「command-lets」),並與對應版本的 Windows 管理框架 (WMF) 一起安裝。

目前,WMF 5.1 是最新推薦版本。在某些情況下,有些新功能除了依賴 WMF 版本外,還依賴作業系統。例如,Windows 8 和 Windows Server 2012 支援 Test-NetConnection cmdlet,該命令可用於測試與特定TCP/IP連接埠的連接,但即使執行最新版本的 WMF,Windows 7 也無法使用此命令。

在大多數 Windows 系統上,使用者可以使用兩種 PowerShell 環境:PowerShell 控制台和 PowerShell ISE(整合式腳本環境)。 PowerShell 控制台看起來像傳統的命令列,但具備 PowerShell 的全部功能。變數名稱、循環、命令自動完成和管道功能均可在 PowerShell 控制台中使用。

對於更進階的用途(例如腳本編寫),PowerShell ISE 提供了命令自動補全、程式碼高亮顯示以及 Microsoft 的 Intellisense 程式碼補全功能,以協助您建立和測試 PowerShell 程式碼。 PowerShell ISE 還可讓您使用標籤式導覽同時處理多個 PowerShell 腳本。

PowerShell 中的 cmdlet

PowerShell 指令的基礎是 cmdlet。 Microsoft 在 PowerShell 中建立 cmdlet 時採用了多種設計策略。

首先是能夠輕鬆推斷 cmdlet 名稱,或至少使其更容易發現。 PowerShell 命令或 cmdlet 也設計得更易於使用,並採用標準化語法,從而更輕鬆地從命令列介面建立腳本。

cmdlet 使用動詞-名詞格式,例如 Get-Service、Stop-Service 或 Import-Csv。 cmdlet 名稱中的動詞部分錶示對名詞執行的操作。通常,用於檢索資訊的 cmdlet 名稱包含動詞Get,例如Get-ProcessGet-Content。用於修改某些內容的命令通常以動詞Set開頭,而用於在某些內容中新增實體的命令通常以AddNew開頭。

其次,PowerShell 中常用的參數也被賦予了標準化的名稱。例如,-ComputerName參數允許在一台或多台遠端電腦上執行該 cmdlet。 -Credential 用於提供包含使用者憑證的驗證對象,以便以特定使用者身分執行該命令。

PowerShell 中的模組

你可以為 cmdlet 和參數使用別名,以減少按鍵次數並縮短命令的總長度(在將多個命令串聯在一起時非常有用)。雖然這些別名並不總是使用標準命名約定,但它們仍然反映了傳統的命令列實用程式。

在 PowerShell 中,DIR、CD、DEL 和 CLS 等別名分別對應到 Get-ChildItem、Set-Location、Remove-Item 和 Clear-Host cmdlet。參數別名可以透過兩種方式運作:它們可以使用 cmdlet 提供的預先定義別名,也可以透過輸入足夠的字元來建立 cmdlet 支援的參數之間的唯一匹配來建立別名。

文件和資料夾管理

大多數系統管理員在工作過程中都需要操作檔案和資料夾,無論是將資料夾移到伺服器上的其他位置、歸檔日誌檔案或搜尋大型檔案。如果對許多文件重複執行相同的操作,使用 PowerShell 自動化執行這些操作將是有效的省時解決方案。

為了查找檔案和資料夾,在以前的電腦時代,管理員學習的第一個命令列工具之一就是 dir 命令。 Dir 指令將列出指定目錄中包含的檔案和資料夾。

PowerShell 中有一個類似的指令,形式為Get-ChildItem Cmdlet 。 Get-ChildItem 可讓您快速建立目錄中的檔案列表,以便您可以透過管道命令操作這些檔案或將輸出指派給變數。

只需提供路徑即可使用 Get-ChildItem,路徑可以透過管道、使用-Path參數或直接在 cmdlet 名稱後提供。要修改 Get-ChildItem 傳回的回應,需要考慮 cmdlet 提供的一些參數。

-Filter參數是搜尋檔案的一種方式。預設情況下,Get-ChildItem 僅傳回目標目錄的直接子目錄。您可以使用-Recurse參數擴充此功能,該參數會遞歸搜尋目前目錄中包含的目錄。

在 PowerShell 4.0 中,Get-ChildItem 新增了使用–File–Directory開關將結果限制為檔案或目錄的功能。先前的 PowerShell 版本必須將結果傳遞給 Where-Object,並透過 PSIsContainer 屬性進行篩選才能確定結果。以下範例展示了兩種傳回 C:\Users 目錄的技術:

Get-ChildItem C:Users -Directory Get-ChildItem C:Users | Where-Object {$_.PSIsContainer –eq $true}

要檢測隱藏文件或系統文件,必須使用 -Force 。 PowerShell 4.0 及更高版本中的 Get-ChildItem 也可用於分別使用-Hidden、-ReadOnly-System來僅傳回隱藏、唯讀或系統檔案。在先前的版本中,可以透過使用 Where-Object 來過濾 Mode 屬性來實現類似的功能:

Get-ChildItem C:Users | Where-Object {$_.Mode -like '*R*'}

檢查文件是否存在

通常,在處理檔案時,我們只需要知道檔案是否存在或目錄路徑是否有效。 PowerShell 提供了一個 Test-Path 形式的 cmdlet 來執行此操作,該命令傳回 true 或 false 的值。

Test-Path 用作嘗試複製或刪除特定檔案之前的預防步驟。

複製、移動和刪除文件

Copy-Item:將一個或多個檔案或目錄從 -Path 參數指定的位置複製到 -Destination 選項指定的位置。

移動項目:移動檔案或資料夾。

複製或移動目錄結構時,應使用-Recurse 參數使 cmdlet 對目錄及其內容執行操作。在某些情況下,也需要-Force 參數,例如複製操作覆寫唯讀檔案時。

Remove-Item:刪除檔案、資料夾。

遇到唯讀檔案時應使用開關-Force ,刪���目錄及其內容時應使用-Recurse 。

使用 PowerShell -WhatIf 和 -Confirm

在執行大規模刪除操作之前,請使用-WhatIf選項。 -WhatIf 選項可以讓你查看執行腳本或命令後會發生什麼,以及刪除重要業務資料是否會造成任何潛在的負面影響。另外值得注意的是,-WhatIf 選項不僅限於檔案操作,它在 PowerShell 中也廣泛使用。

對於打算手動運行的腳本,或者更糟的是,有依賴手動運行的命令的腳本,請考慮使用-Co​​nfirm。這允許您在操作實際發生之前要求使用者互動。

PowerShell 腳本 = 強化版批次文件

PowerShell 本身是用 .NET 語言編寫的,並且高度依賴 .NET Framework。因此,PowerShell 被設計為一種物件導向的 Shell 和腳本語言。 PowerShell 中的所有內容都被視為具有 .NET Framework 全部功能的物件。一個命令會公開一組對象,這些對象可以使用該對象類型的屬性和方法來使用。當您想要將一個命令的輸出透過管道傳輸到另一個命令時,PowerShell 實際上是將物件本身傳遞過去,而不僅僅是第一個命令的文字輸出。這使得下一個命令可以完全存取管道中該物件的所有屬性和方法。

將一切視為物件並且能夠在命令之間接受物件是命令列實用程式理論的一大變革。即便如此,PowerShell 仍然像傳統的 Shell 一樣運作。可以從命令列輸入和運行命令、腳本和可執行文件,結果顯示為文字。 Windows .CMD 和 .BAT 檔案、VBScript、JScript 以及在 CMD.EXE 內執行的可執行檔仍然在 PowerShell 中執行。但是,由於它們不是物件導向的,因此它們無法完全存取在 PowerShell 中建立和使用的物件。這些遺留腳本和可執行檔仍然將一切視為文本,但您可以將 PowerShell 與許多其他技術結合使用。如果您想將 PowerShell 與無法一次性轉換的現有腳本集合一起使用,這一點尤其重要。

PowerShell 參數說明

Cmdlet 可以接受參數來改變其行為。執行 Cmdlet 或函數時,可以提供參數值來指定每個 PowerShell 指令執行的內容、時間、地點和方式。

例如,Get-Process 將檢索並列出作業系統中所有正在運行的進程:

PowerShell 以及您需要了解的有關此實用程式的所有信息
Get-Process 列出所有正在執行的進程。

但是,如果您只想獲取特定進程怎麼辦?您可以使用參數來實現。例如,要取得所有 Slack 進程,您可以將 Name 參數與 Get-Process Cmdlet 一起使用:

Get-Process -Name Slack

然後你只會看到名為「slack」的進程:

PowerShell 以及您需要了解的有關此實用程式的所有信息
使用帶有參數的 Get-Process

提示:有些參數是“位置相關的”,這意味著它們的名稱是可選的。在本例中,Get-Process -Name SlackGet-Process Slack執行相同的任務。

每個 Cmdlet 都會接受不同類型的參數。使用 Get-Help 指令可在 SYNTAX 部分查看該 Cmdlet 接受的參數。

Get-Help Get-Process

您將看到可以運行給定 Cmdlet 的所有可能方式的清單:

PowerShell 以及您需要了解的有關此實用程式的所有信息
cmdlet 語法參數

在本例中,Get-Process Cmdlet 接受Name、Id、ComputerName、Module、FileVersionInfo等參數以及其他常見參數。此處的符號意義如下:

象徵

姓名

意義

 

參數不接受輸入

-

連字符

指定參數名稱

<>

花括號

文字佔位符

[]

括號

此參數可以接受一個或多個值。

{}

花括號

此參數接受一組值。

參數接受一組值,這些值將指示它們所需的資料類型,例如字串、整數、布林值或 DateTime。例如,以下命令:

Get-Process [[-Name] ]

... 表示Name參數接受一個或多個字串值,而此指令:

Get-Process -Id 

...表示Id參數接受一個或多個整數值。

前面的 Get-Process 範例使用了 Name 參數來縮小結果範圍。但是,如果要將其縮小到更具體的進程,可以使用ID參數,該參數的語法規定該參數必須為整數。

Get-Process -Id 3016

然後您將在列表中只看到一個進程:

PowerShell 以及您需要了解的有關此實用程式的所有信息
在 Cmdlet 上使用 Id 參數

創建管道

PowerShell 將所有資料視為物件。為了建構腳本,這些物件會透過一系列使用管道符號 (|) 連接的 Cmdlet 或函數來運作。選擇正確的 Cmdlet 並使用管道符按邏輯順序連接它們對於編寫高效的腳本至關重要。

假設你正在建立一個腳本,用於對目錄中佔用空間最大的 5 個檔案進行排序並顯示。其實有很多更強大的文件排序腳本,但這個簡單的腳本比較容易理解:

PowerShell 以及您需要了解的有關此實用程式的所有信息
腳本 Sort-LargeFiles PS1

若要在 PowerShell 中執行此操作,請使用如下所示的管道:

Get-ChildItem -Path "C:\Directory" -File | Sort-Object Length -Descending `
 | Select-Object -First 5 | Format-Table Name, Length -AutoSize

將管道儲存為 PS1 腳本

現在我們有了一個可運行的管道,您可以將其儲存為 PS1 腳本文件,這樣您就不必在每次使用時都會匯入它。

建立 PS1 檔案最簡單的方法是將腳本貼到記事本中,並使用 .ps1 副檔名儲存檔案。

PowerShell 以及您需要了解的有關此實用程式的所有信息
使用記事本建立腳本

建立 PS1 檔案後,您可以透過執行./ScriptName.ps1在 PowerShell 中使用它:

PowerShell 以及您需要了解的有關此實用程式的所有信息
使用 PS1 腳本

提示:如果出現權限錯誤,最快的解決方案是在執行腳本時以管理員權限執行 PowerShell。

恭喜!現在您可以建立 PowerShell PS1 腳本了。

PowerShell 腳本範例

閱讀並了解新科技的魅力是一回事,但實際使用又是另一回事!在本文的其餘部分,我們將開發一個 PowerShell 腳本來演示其功能以及如何使用它。

DIR 是CMD.EXE 中最常用的指令之一。此指令顯示父目錄中包含的所有檔案和子目錄(如圖 1 所示)。除了每個物件的名稱外,還提供上次更新日期和時間以及每個檔案的大小等資訊。 DIR 也會顯示目錄中所有檔案的總大小,以及檔案和子目錄的總數。

PowerShell 以及您需要了解的有關此實用程式的所有信息
圖 1

在 PowerShell 中執行 DIR 也會產生如圖 2 所示的目錄列表,但方式略有不同。 PowerShell 沒有 DIR 指令,而是有 Get-ChildItem 指令,它可以執行相同的功能。在 PowerShell 中,DIR 是 Get-ChildItem 的別名。本文不打算討論別名。您可以將 PowerShell 中的 DIR 視為 Get-ChildItem 的縮寫。

PowerShell 中的 DIR 提供了許多與上述相同的資訊:檔案和資料夾清單、它們上次修改的日期和時間以及每個檔案的大小。但是,它缺少 CMD.EXE 中的 DIR 提供的摘要資訊:資料夾中所有檔案的總大小、檔案總數以及子資料夾的總數。

PowerShell 以及您需要了解的有關此實用程式的所有信息
圖 2

對於範例場景,您需要建立一個模擬 CMD.EXE DIR 指令的 PowerShell 腳本。下面我將解釋腳本中最核心的部分。

DIR.PS1:標題

PowerShell 腳本由純文字檔案中的PowerShell 指令組成,副檔名為 .PS1。您可以使用名為 DIR.PS1 的文字檔案來取代 DIR。

若要執行腳本,請在 PowerShell 畫面中鍵入下列命令:

.DIR.PS1 X:Folder

其中 X 是磁碟機分割區號碼(如 C、D、E),Folder 是資料夾名稱。

如果您想了解磁碟機分割區的訊息,則需要使用 Windows 管理規格 (WMI)。 WMI 的細節超出了本文的討論範圍,因此我們在此不再贅述。但下面的 PowerShell 程式碼即使不使用 WMI 也很容易理解。您可以建立一個「$filter」變量,並與 Get-WmiObject 指令一起使用。此過濾器會告知 Get-WmiObject 命令您只需要取得特定磁碟機的資訊。 Get-WmiObject 指令的結果會儲存在一個名為 $volInfo 的變數中。請記住,在 PowerShell 中,一切都是物件;$volInfo 現在是 Get-WmiObject 傳回的物件。

$filter = "DeviceID = '" + $drive + ":'"
$volInfo = Get-WmiObject -Class Win32_LogicalDisk -Filter $filter

現在,您可以存取與該物件關聯的所有物件和方法。卷序號可透過 VolumeSerialNumber 屬性存取。傳回的數字是一個 8 位元字串。但通常情況下,您希望將其格式化為四個數字,並用連字號分隔。您可以像下面這樣操作。第一行末尾的連字符是 PowerShell 中的行繼續符。它的作用是告訴 PowerShell 該行不會換行,並且包含下一行。編寫程式碼時,換行並非必需,但為了減少行寬並使程式碼更具可讀性,您應該這樣做。

$serial = $volInfo.VolumeSerialNumber.SubString(0, 4) + "-" + `
$volInfo.VolumeSerialNumber.SubString(4, 4)

現在您有了 $volInfo 對象,就可以將 DIR 頭資訊寫入螢幕了。如果磁碟機沒有名稱,則寫入螢幕的文字與磁碟機有名稱時略有不同。一個簡單的 If-Else 語句用於檢查 VolumeName 屬性是否為空字串。 Write-Host 語句用於將每一行文字寫入螢幕。

If ($volInfo.VolumeName -eq "") { Write-Host (" Volume in drive " + $drive + " has no label") } Else { Write-Host (" Volume in drive " + $drive + " is " + $volInfo.VolumeName) } Write-Host (" Volume Serial Number is " + $serial) Write-Host ("`n Directory of " + $args[0] + "`n")

Write-Host 指令開頭和結尾處的「`n」字元用於在文字前後插入新行。 Write-Host 指令會在每行末尾新增一行。因此,「`n」的作用是在文字前後創建一個空行。

您注意到 If 指令中的「-eq」了嗎?它是一個相等比較運算子。下表列出了所有比較運算子:

-eq、-ieq 比較方式
-ne,-ine 比較不平等
-gt、-igt 比較大於
-ge,-ige 比較大於或等於
-lt、-ilt 比較小於
-le, -ile 比較小於或等於

比較運算子前的 -i 字元表示該運算子不區分大小寫。

PowerShell 以及您需要了解的有關此實用程式的所有信息
圖 3:目前腳本的輸出數據

DIR.PS1:檔案/資料夾列表

現在,您可以顯示此資料夾的內容和屬性了。首先,您需要呼叫 PowerShell Get-ChildItem 命令來取得檔案集合,並將其作為參數傳遞給腳本。 Get-ChildItem 指令將取得檔案和資料夾物件的集合(而不僅僅是它們的名稱),也會將這些物件直接輸入 Sort-Object 命令進行排序。預設情況下,Sort-Object 指令會根據 Name 屬性對物件進行排序。因此,您無需指定任何其他參數。排序後的物件集合將儲存在名為 $items 的變數中。

$items = Get-ChildItem $args[0] | Sort-Object

獲得文件和資料夾物件的集合後,您需要循環遍歷它們並顯示相應的屬性。執行此操作的命令是 ForEach。對於每個檔案或資料夾,顯示的屬性將是檔案的上次修改日期和時間、名稱、長度或大小。括號內那些看起來奇怪的字串是 .NET 字串格式程式碼。它們用於左右對齊欄位以及格式化日期、時間和數字。理解這些字串格式程式碼並不十分重要,因為它們對於本腳本的本質而言並非必不可少。

If 語句用來判斷物件是否為目錄。如果 Mode 屬性的第一個字元是“d”,則該物件為目錄。您需要仔細檢查,因為目錄的程式碼通常與檔案的程式碼不同。

注意 If 語句中的 $totalDirs++ 行。這是一個計數器,用於追蹤目錄的數量。同樣,還有一個 $totalFiles 變量,用於追蹤所有檔案的總大小。這些值在執行過程中總是會計算。但它們僅在文件清單過程完成後才會顯示。

ForEach ($i In $items)
{
$date = "{0, -20:MM/dd/yyyy hh:mm tt}" -f $i.LastWriteTime
$file = $i.Name
If ($i.Mode.SubString(0, 1) -eq "d")
{
$totalDirs++
$list = $date + " {0, -15}" -f "
" + " " + $file
}
Else
{
$totalFiles++
$size = "{0, 18:N0}" -f $i.Length
$list = $date + $size + " " + $file
}
$totalSize += $i.Length
Write-Host $list
}

PowerShell 以及您需要了解的有關此實用程式的所有信息
圖 4:顯示更新後的腳本的輸出資料。

DIR.PS1:頁腳

剩下要做的就是將檔案總數、目錄總數、所有檔案的總大小以及此磁碟機分割區的可用空間寫入螢幕。為此,您需要使用上一節中建立的計數器變數 ($totalFiles、$totalDirs、$totalSize)。您可以從腳本開頭建立的 $volInfo 變數中取得可用空間量。

Write-Host ("{0, 16:N0}" -f $totalFiles + " File(s)" + `
"{0, 15:N0}" -f $totalSize + " bytes")
Write-Host ("{0, 16:N0}" -f $totalDirs + " Dir(s)" + `
"{0, 16:N0}" -f $volInfo.FreeSpace + " bytes free`n")

PowerShell 以及您需要了解的有關此實用程式的所有信息
圖5:顯示腳本的完整輸出資料。

預測和增強可以

儘管您建立的腳本產生的輸出與 CMD.EXE DIR 命令幾乎相同,但您仍應注意一些注意事項,並且可以進行一些增強。

  • 該腳本不執行任何錯誤檢查。
  • 如果未將有效路徑傳遞給腳本,則腳本將失敗並顯示 PowerShell 錯誤訊息。
  • 腳本中給出的目錄總數比 CMD.EXE DIR 命令的結果少 2,因為 Get-ChildItem 命令沒有像 CMD.EXE 中那樣計算“.”和“..”兩個目錄。
  • 您的腳本僅按檔案名稱、資料夾名稱排序,不提供任何其他按屬性排序。
  • 您的腳本無法顯示資料夾及其所有子資料夾的內容。

PowerShell 如何協助您在 PC 上實現自動化操作

編寫簡單的 PowerShell 腳本

您可以使用 PowerShell 自動化幾乎所有操作,例如批次重新命名檔案以保持一致性,或自動啟動應用程式。讓我們編寫幾個簡單的 Windows PowerShell 腳本來了解它的工作原理。

注意:如果在執行腳本時遇到有關執行策略的錯誤,則可能需要透過執行「Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass」暫時允許腳本執行

批次重命名資料夾中的文件

您可以使用 PowerShell 複製、移動和刪除電腦上的檔案。您也可以批次重命名特定類型的檔案。例如,您可以這樣操作:將檔案名稱中的前綴“oldco”替換為“newco”,即可重新命名多個文字檔案:

Get-ChildItem -Path "C:\CompanyFiles" -Filter "*.txt" | Rename-Item -NewName {$_.Name -replace "oldco","newco"}

上述腳本中,「.txt」是檔案副檔名過濾器。您可以修改它,將其設為 .jpg、.docx 等,以搜尋不同類型的檔案。

自動啟動應用程式

如果您每天都打開同一組應用程序,則可以編寫一個 PowerShell 腳本以便透過點擊啟動它們:

#Open multiple apps with a single click
Start-Process "notepad.exe"
Start-Process "calc.exe"
Start-Process "Chrome.exe"
Start-Process "slack.exe"

將腳本貼到記事本文件中,並將其另存為LaunchFavoriteApps.ps1。然後,只需雙擊該文件即可啟動腳本中列出的所有應用程式。

將重要檔案複製到備份位置

您可以使用以下腳本定期將重要文件備份到備份位置。請務必根據需要更改來源路徑和目標路徑:

#Copy MyFiles folder contents to MyFilesBackup in D:\
Copy-Item -Path "C:\Documents\MyFiles" -Destination "D:\MyFilesBackup" -Recurse

編寫 PowerShell 腳本以每天自動整理文件

由於每天都會下載各種類型的文件, 「下載」資料夾很快就會變得雜亂無章,各種文件散落在各處。為了解決這個問題,我們可以編寫一個 PowerShell 腳本,在每天結束時將下載的檔案按檔案類型分類到資料夾中。

開啟一個新的記事本檔案並貼上以下腳本。確保將腳本中的來源資料夾路徑變更為與下載資料夾路徑相符:

# Change the source folder path below
$sourcePath = "E:\Downloads"
# Add file mapping folder names; the Others folder includes all the files that do not match file types in the other categories
$fileTypes = @{
"Documents" = @("*.docx", "*.pdf", "*.txt")
"Images" = @("*.jpg", "*.png", "*.gif")
"Media" = @("*.mp4", "*.mp3", "*.mov")
"Zip" = @("*.zip", "*.rar")
"ISO" = @("*.iso")
"Others" = @("*")
}
# Iterate through each folder type and prepare a destination folder for organizing files
foreach ($folder in $fileTypes.Keys) {
# Create the destination folder path
$destPath = Join-Path -Path $sourcePath -ChildPath $folder
# Check if the destination folder exists, and create it if it doesn't
if (!(Test-Path -Path $destPath)) {
New-Item -ItemType Directory -Path $destPath | Out-Null
}
# Move matching files from the source folder to the destination folder based on file type patterns
foreach ($pattern in $fileTypes[$folder]) {
Get-ChildItem -Path $sourcePath -Filter $pattern -File -ErrorAction SilentlyContinue | ForEach-Object {
try {
Move-Item -Path $_.FullName -Destination $destPath -Force -ErrorAction Stop
Write-Output "Moved: $($_.FullName) to $destPath"
} catch {
Write-Warning "Failed to move file: $($_.FullName). Error: $_"
}
}
}
}
Write-Output "Files organized successfully!"

若要儲存文件,請點選「檔案」>「另存為」,並輸入OrganizeDownloadsFolder.ps1作為檔案名稱。然後,點擊“儲存類型”並選擇“所有檔案”。雙擊OrganizeDownloadsFolder.ps1檔案以執行腳本。

安排和執行任務

當然,編寫腳本是自動化過程的一部分。第二部分是確保腳本能夠自動執行以完成任務。為此,我們可以建立計劃任務,以便每天或根據需要執行腳本。

開啟 PowerShell,複製並貼上以下腳本,然後按Enter。確保將“J:\OrganizeDownloadsFolder.ps1”替換為OrganizeDownloadsFolder.ps1腳本的完整檔案路徑。

$action = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "-File 'J:\OrganizeDownloadsFolder.ps1'"
$trigger = New-ScheduledTaskTrigger -Daily -At "5:00 PM"
Register-ScheduledTask -Action $action -Trigger $trigger -TaskName "OrganizeDownloadsFolderDaily"

完成後,按Enter 鍵。該腳本將在任務規劃程式中建立一個排程任務,以便每天下午 5:00 執行文件組織腳本。如果您希望設定其他時間,可以在上述腳本中進行修改。

此外,您還可以使用 PowerShell 自動執行其他日常任務,例如當您的主磁碟機上的可用空間不足時向您發出警報的空間監控腳本、對批次 PDF 文件進行密碼保護,甚至從影像資料夾應用動態桌布。

儘管 PowerShell 是一款功能強大的實用程式和腳本語言,但要掌握和使用它仍然需要一些時間,尤其是在您不熟悉 .NET Framework 環境的情況下。我希望本文和範例腳本能夠幫助任何想要了解 PowerShell 的人。不過,本文所建立的範例腳本相當簡單。我相信它可以建構和開發得更完善,以服務更複雜的應用程式。

Tags: #System
Sign up and earn $1000 a day ⋙

Leave a Comment

將視窗固定在 Windows 螢幕上的 4 種方法

將視窗固定在 Windows 螢幕上的 4 種方法

如果您想知道如何將任何視窗固定為始終位於其他視窗之上(始終位於頂部),請立即閱讀本文!

電力線適配器如何改變你的家庭互聯網

電力線適配器如何改變你的家庭互聯網

你家的Wi-Fi網速達不到你的預期嗎?有一個相對便宜又簡單的解決方案:電力線適配器。

如何修復 Windows 10 上「設定」應用程式無法運行的問題

如何修復 Windows 10 上「設定」應用程式無法運行的問題

在 Windows 10 上,用戶可以透過「開始」功能表存取「設定」應用程式比「控制台」更易於存取。然而,許多用戶報告稱,由於一個錯誤,該應用程式在點擊時無法運行(或將用戶重定向到 Windows 應用程式商店)。以下是一些針對此問題的解決方案。

如何在不購買軟體的情況下發送受密碼保護的文件

如何在不購買軟體的情況下發送受密碼保護的文件

您無需花費一分錢即可保護您的文件和其他重要資料。使用值得信賴的免費應用程式鎖定所有內容,並安全地將其發送給任何人。

6 個免費工具告訴你你的硬碟即將發生故障

6 個免費工具告訴你你的硬碟即將發生故障

有幾種免費工具可以預測驅動器故障,讓您有時間備份資料並及時更換驅動器。

如何在 Windows 10 上安裝免費的 HEVC 編解碼器(用於 H.265 影片)

如何在 Windows 10 上安裝免費的 HEVC 編解碼器(用於 H.265 影片)

微軟對其官方編解碼器收費,並且不將其包含在 Windows 10 中。但是,您可以免費獲得它們,而無需拿出信用卡並花費 0.99 美元。

Windows 上 12 個最有用的 PowerShell 指令

Windows 上 12 個最有用的 PowerShell 指令

大多數 IT 管理員使用 PowerShell 進行腳本編寫和自動化,但它不僅適用於 IT 專業人員 - 任何處理混亂資料夾的人都需要這些命令。

如何刪除舊的 Windows 還原點以釋放空間

如何刪除舊的 Windows 還原點以釋放空間

透過檢查儲存使用情況、刪除舊的還原點以及設定合理的儲存限制,您可以控制儲存而不犧牲其保護。

如何在每個顯示器上設定不同的桌布 Windows 10/11

如何在每個顯示器上設定不同的桌布 Windows 10/11

在 Windows 上設定多顯示器非常簡單,只需幾分鐘即可完成。設定多顯示器模式(多個螢幕)後,您可以為每個螢幕設定單獨的桌布。若要執行此操作,請參閱以下來自 WebTech360 的文章。

如何在 Windows 上延遲啟動排程任務

如何在 Windows 上延遲啟動排程任務

此功能對於延遲不必要的任務、確保任務開始前的網路連線、按特定順序運行任務、安排更新或執行硬體維護非常有用。

如何在 Windows 上重設 Windows 安全性設定

如何在 Windows 上重設 Windows 安全性設定

在 Windows 上,有時您還需要將 Windows 安全設定重設為預設值以修復某些連接錯誤、停止工作或只是想恢復到原始狀態…

在 Windows 11 上阻止自動驅動程式安裝的說明

在 Windows 11 上阻止自動驅動程式安裝的說明

Windows 11 可以在無需用戶幹預的情況下為您的電腦下載驅動程序,但您並不總是希望自動安裝驅動程式以避免不必要的問題。

在 Windows 中以管理員權限執行軟體的 6 種方法

在 Windows 中以管理員權限執行軟體的 6 種方法

以管理員權限執行某些程式通常是獲得完整功能所必需的,尤其是系統工具或檔案編輯和設定軟體。

常見Run CMD指令總結

常見Run CMD指令總結

我們可以使用可用的 CMD 命令來取代 Windows 上的手動直接存取操作,從而實現更快的存取。

請依照這 7 個步驟操作,即可防止 Windows 11 再次變慢!

請依照這 7 個步驟操作,即可防止 Windows 11 再次變慢!

從刪除臨時檔案到更新軟體,有許多簡單有效的方法可以讓您的電腦像新的一樣順利運作。

將視窗固定在 Windows 螢幕上的 4 種方法

將視窗固定在 Windows 螢幕上的 4 種方法

如果您想知道如何將任何視窗固定為始終位於其他視窗之上(始終位於頂部),請立即閱讀本文!

電力線適配器如何改變你的家庭互聯網

電力線適配器如何改變你的家庭互聯網

你家的Wi-Fi網速達不到你的預期嗎?有一個相對便宜又簡單的解決方案:電力線適配器。

如何修復 Windows 10 上「設定」應用程式無法運行的問題

如何修復 Windows 10 上「設定」應用程式無法運行的問題

在 Windows 10 上,用戶可以透過「開始」功能表存取「設定」應用程式比「控制台」更易於存取。然而,許多用戶報告稱,由於一個錯誤,該應用程式在點擊時無法運行(或將用戶重定向到 Windows 應用程式商店)。以下是一些針對此問題的解決方案。

如何在不購買軟體的情況下發送受密碼保護的文件

如何在不購買軟體的情況下發送受密碼保護的文件

您無需花費一分錢即可保護您的文件和其他重要資料。使用值得信賴的免費應用程式鎖定所有內容,並安全地將其發送給任何人。

6 個免費工具告訴你你的硬碟即將發生故障

6 個免費工具告訴你你的硬碟即將發生故障

有幾種免費工具可以預測驅動器故障,讓您有時間備份資料並及時更換驅動器。

如何在 Windows 10 上安裝免費的 HEVC 編解碼器(用於 H.265 影片)

如何在 Windows 10 上安裝免費的 HEVC 編解碼器(用於 H.265 影片)

微軟對其官方編解碼器收費,並且不將其包含在 Windows 10 中。但是,您可以免費獲得它們,而無需拿出信用卡並花費 0.99 美元。

Windows 上 12 個最有用的 PowerShell 指令

Windows 上 12 個最有用的 PowerShell 指令

大多數 IT 管理員使用 PowerShell 進行腳本編寫和自動化,但它不僅適用於 IT 專業人員 - 任何處理混亂資料夾的人都需要這些命令。

如何刪除舊的 Windows 還原點以釋放空間

如何刪除舊的 Windows 還原點以釋放空間

透過檢查儲存使用情況、刪除舊的還原點以及設定合理的儲存限制,您可以控制儲存而不犧牲其保護。

如何在每個顯示器上設定不同的桌布 Windows 10/11

如何在每個顯示器上設定不同的桌布 Windows 10/11

在 Windows 上設定多顯示器非常簡單,只需幾分鐘即可完成。設定多顯示器模式(多個螢幕)後,您可以為每個螢幕設定單獨的桌布。若要執行此操作,請參閱以下來自 WebTech360 的文章。

如何在 Windows 上延遲啟動排程任務

如何在 Windows 上延遲啟動排程任務

此功能對於延遲不必要的任務、確保任務開始前的網路連線、按特定順序運行任務、安排更新或執行硬體維護非常有用。

如何在 Windows 上重設 Windows 安全性設定

如何在 Windows 上重設 Windows 安全性設定

在 Windows 上,有時您還需要將 Windows 安全設定重設為預設值以修復某些連接錯誤、停止工作或只是想恢復到原始狀態…

在 Windows 11 上阻止自動驅動程式安裝的說明

在 Windows 11 上阻止自動驅動程式安裝的說明

Windows 11 可以在無需用戶幹預的情況下為您的電腦下載驅動程序,但您並不總是希望自動安裝驅動程式以避免不必要的問題。

在 Windows 中以管理員權限執行軟體的 6 種方法

在 Windows 中以管理員權限執行軟體的 6 種方法

以管理員權限執行某些程式通常是獲得完整功能所必需的,尤其是系統工具或檔案編輯和設定軟體。

常見Run CMD指令總結

常見Run CMD指令總結

我們可以使用可用的 CMD 命令來取代 Windows 上的手動直接存取操作,從而實現更快的存取。

請依照這 7 個步驟操作,即可防止 Windows 11 再次變慢!

請依照這 7 個步驟操作,即可防止 Windows 11 再次變慢!

從刪除臨時檔案到更新軟體,有許多簡單有效的方法可以讓您的電腦像新的一樣順利運作。