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

如果您的 PC 可以為您處理無聊的任務,那會怎麼樣?使用 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 工具

PowerShell 預設安裝在 Windows 10、Windows 7、Windows Server 2008 R2 和較新版本的 Windows 中。新版本的 PowerShell 增加了新功能和「cmdlet」(Microsoft 對 PowerShell 命令的術語 - 發音為「command-lets」),並與對應版本的 Windows 管理框架 (WMF) 一起安裝。

目前WMF 5.1是最新推薦版本。在某些情況下,一些新功能除了取決於 WMF 版本之外,還取決於作業系統。例如,Windows 8 和 Windows Server 2012 支援 Test-NetConnection cmdlet,它允許您測試與特定TCP/IP連接埠的連接,但即使執行最新版本的 WMF,此 cmdlet 在 Windows 7 中也不可用。

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

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

PowerShell 中的 cmdlet

PowerShell 指令的基礎是 cmdlet。微軟在 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\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 提供了一個 cmdlet 來以 Test-Path 的形式執行此操作,它會傳回 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 被設計為物件導向的實用程式和腳本語言。 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等參數以及其他常見參數。這裡的符號意義是:

象徵

姓名

意義

 

參數不接受輸入

-

連字符

指定參數名稱

<>

花括號

文字佔位符

[]

括號

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

{}

花括號

此參數接受一組值。

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

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 複製、移動和刪除 PC 上的檔案。您也可以批次重命名特定文件類型的文件。例如,您可以將檔案名稱中的前綴“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 的人都有用。但範例中建立的腳本非常簡單。相信它可以建構和發展得更完善,更好地服務更複雜的應用。

Sign up and earn $1000 a day ⋙

Leave a Comment

索尼、三星、LG 的 32 吋、40 吋、43 吋、55 吋電視的尺寸是多少?

索尼、三星、LG 的 32 吋、40 吋、43 吋、55 吋電視的尺寸是多少?

以下的文章將幫助您了解索尼、三星和 LG 目前電視線的尺寸,以便您可以做出正確的購買決定。

7個簡單的科技調整可以顯著提升你的生活品質

7個簡單的科技調整可以顯著提升你的生活品質

與科技建立健康的關係看似艱鉅,但微小的改變往往會帶來巨大的改變。

三星圖庫應用程式中你不知道的 8 件事

三星圖庫應用程式中你不知道的 8 件事

三星的 Gallery 應用程式功能比您想像的更強大,但這可能不是顯而易見的。

微軟的可折疊智慧型手機不會有摺痕

微軟的可折疊智慧型手機不會有摺痕

據稱,微軟已於 10 月 1 日獲得一項可折疊手機專利,該手機可 360 度折疊,但不會在螢幕上產生皺紋,這意味著微軟距離推出其首款可折疊智慧型手機已經越來越近。

谷歌測試搜尋中的藍色複選標記

谷歌測試搜尋中的藍色複選標記

谷歌正在測試透過搜尋中的藍色複選標記進行驗證的新功能。此功能將幫助用戶避免點擊虛假或欺詐性的網站連結。

區分 Microsoft 365 和 Office 2024

區分 Microsoft 365 和 Office 2024

乍一看,Microsoft 365 和 Office 2024 可能看起來非常相似,因為它們都允許您存取 Microsoft 流行且廣泛使用的應用程式。

最新的元素地下城代碼以及如何輸入代碼

最新的元素地下城代碼以及如何輸入代碼

元素地下城代碼是遊戲玩家必備的獎勵形式。與 Roblox 上的任何其他線上遊戲一樣,玩家可以透過金錢或其他物品來獲得這些幫助。

如何在 Word 中重複表格標題列

如何在 Word 中重複表格標題列

列印Word文件時,在Word中建立表格,在Word中重複標題可以幫助我們更方便地追蹤標題,跨不同頁面無縫閱讀文件標題,尤其是長標題。

如何在 iMessage iOS 18 上建立動畫訊息

如何在 iMessage iOS 18 上建立動畫訊息

新的 iOS 18 iMessage 更新了動畫訊息、文字效果以及可用於發送訊息的多種選項。

為什麼豬是蛇的剋星?

為什麼豬是蛇的剋星?

關於豬,有一個有趣的事實並不是所有人都知道:豬被認為是蛇的敵人,因為當這兩種動物相遇時,大多數蛇都會成為豬的食物。

地球與太陽系中最大的行星木星的距離是多少?

地球與太陽系中最大的行星木星的距離是多少?

地球到木星的距離是多少?如果你不知道,本文將告訴你木星距離地球有多遠。

探索 2023 年 S1 賽季的超級將軍 Lien Quan Mobile

探索 2023 年 S1 賽季的超級將軍 Lien Quan Mobile

哪些將軍不屬於行動聯盟元數據?現在讓我們來探索一下

Graves DTCL 第 7.5 季:標準物品,Graves Loi Long 陣容

Graves DTCL 第 7.5 季:標準物品,Graves Loi Long 陣容

第 1 季、第 3 季和第 6 季的 Graves DTCL 都只花費 1 金幣,似乎只是為了刺激部落而增加的一個額外冠軍,在遊戲初期的主要角色仍然被使用,但並不多。截至 DTCL 第 7.5 季,格雷夫斯的價格已飆升至 4 金,如果您決定玩雷龍或槍手,他絕對是不可或缺的攜帶者。

如何在三星上使用單獨的應用程式聲音

如何在三星上使用單獨的應用程式聲音

對於三星手機,您應該使用單獨的應用程式聲音功能。例如,您可以播放 Apple Music,您的手機將透過汽車的揚聲器播放音訊。

關於工作的優秀名言、關於工作的良好狀態激勵你成功

關於工作的優秀名言、關於工作的良好狀態激勵你成功

網路上有很多關於工作的良好狀態。本文將為您總結好的、有意義的工作狀態。