修正 Windows 10 中功能鍵不起作用的問題
Fn 功能鍵為您提供了一種更快捷、更輕鬆的方式來控制某些硬體功能。
如果您的電腦能夠幫您處理這些日常瑣事,會怎麼樣?有了 Windows PowerShell,它就能做到。以下是如何利用 PowerShell 自動執行那些沒人願意一再重複的日常任務。
目錄
Microsoft PowerShell 是一款命令列實用程式和腳本語言,它是一款強大的工具,可協助管理員自動執行各種電腦和網路任務。 PowerShell 包含命令提示字元的元件,並基於 .NET 框架建置。如果您正在閱讀有關 WebTech360 的文章,您應該知道 PowerShell 是 IT 管理員管理大型網路的首選工具。
學習如何使用 PowerShell 將簡化許多繁瑣的日常任務。您也可以透過網路進行系統範圍的更改,而無需單獨配置每台伺服器。 PowerShell 正成為運作混合雲環境的重要組成部分。
PowerShell 用途廣泛,可協助您提高工作效率,並保持網路高效運作。最基本的用途包括:安排系統每日更新、產生目前進程報告、定期服務等等。雖然許多任務都可以透過 GUI 完成,但 PowerShell 的重點在於提高執行速度。
如果您有一項例行維護任務需要幾分鐘才能完成設置,您可以將相同的功能編寫成名為 PowerShell 的命令。這樣,下次打開該腳本時,它將在背景運行。掌握 PowerShell 腳本邏輯,理解物件、var(變數)的工作原理,並在網路中智慧地部署它,您會後悔自己為什麼沒有早點使用 PowerShell。
本教學將介紹 PowerShell 的基礎知識,這對 IT 新手(尤其是熟悉 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 指令,您將需要花費更多時間學習並掌握更進階的概念。
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。 Microsoft 在 PowerShell 中建立 cmdlet 時採用了多種設計策略。
首先是能夠輕鬆推斷 cmdlet 名稱,或至少使其更容易發現。 PowerShell 命令或 cmdlet 也設計得更易於使用,並採用標準化語法,從而更輕鬆地從命令列介面建立腳本。
cmdlet 使用動詞-名詞格式,例如 Get-Service、Stop-Service 或 Import-Csv。 cmdlet 名稱中的動詞部分錶示對名詞執行的操作。通常,用於檢索資訊的 cmdlet 名稱包含動詞Get,例如Get-Process或Get-Content。用於修改某些內容的命令通常以動詞Set開頭,而用於在某些內容中新增實體的命令通常以Add或New開頭。
其次,PowerShell 中常用的參數也被賦予了標準化的名稱。例如,-ComputerName參數允許在一台或多台遠端電腦上執行該 cmdlet。 -Credential 用於提供包含使用者憑證的驗證對象,以便以特定使用者身分執行該命令。
你可以為 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 中也廣泛使用。
對於打算手動運行的腳本,或者更糟的是,有依賴手動運行的命令的腳本,請考慮使用-Confirm。這允許您在操作實際發生之前要求使用者互動。
PowerShell 腳本 = 強化版批次文件
PowerShell 本身是用 .NET 語言編寫的,並且高度依賴 .NET Framework。因此,PowerShell 被設計為一種物件導向的 Shell 和腳本語言。 PowerShell 中的所有內容都被視為具有 .NET Framework 全部功能的物件。一個命令會公開一組對象,這些對象可以使用該對象類型的屬性和方法來使用。當您想要將一個命令的輸出透過管道傳輸到另一個命令時,PowerShell 實際上是將物件本身傳遞過去,而不僅僅是第一個命令的文字輸出。這使得下一個命令可以完全存取管道中該物件的所有屬性和方法。
將一切視為物件並且能夠在命令之間接受物件是命令列實用程式理論的一大變革。即便如此,PowerShell 仍然像傳統的 Shell 一樣運作。可以從命令列輸入和運行命令、腳本和可執行文件,結果顯示為文字。 Windows .CMD 和 .BAT 檔案、VBScript、JScript 以及在 CMD.EXE 內執行的可執行檔仍然在 PowerShell 中執行。但是,由於它們不是物件導向的,因此它們無法完全存取在 PowerShell 中建立和使用的物件。這些遺留腳本和可執行檔仍然將一切視為文本,但您可以將 PowerShell 與許多其他技術結合使用。如果您想將 PowerShell 與無法一次性轉換的現有腳本集合一起使用,這一點尤其重要。
Cmdlet 可以接受參數來改變其行為。執行 Cmdlet 或函數時,可以提供參數值來指定每個 PowerShell 指令執行的內容、時間、地點和方式。
例如,Get-Process 將檢索並列出作業系統中所有正在運行的進程:
但是,如果您只想獲取特定進程怎麼辦?您可以使用參數來實現。例如,要取得所有 Slack 進程,您可以將 Name 參數與 Get-Process Cmdlet 一起使用:
Get-Process -Name Slack
然後你只會看到名為「slack」的進程:
提示:有些參數是“位置相關的”,這意味著它們的名稱是可選的。在本例中,Get-Process -Name Slack和Get-Process Slack執行相同的任務。
每個 Cmdlet 都會接受不同類型的參數。使用 Get-Help 指令可在 SYNTAX 部分查看該 Cmdlet 接受的參數。
Get-Help Get-Process
您將看到可以運行給定 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 或函數來運作。選擇正確的 Cmdlet 並使用管道符按邏輯順序連接它們對於編寫高效的腳本至關重要。
假設你正在建立一個腳本,用於對目錄中佔用空間最大的 5 個檔案進行排序並顯示。其實有很多更強大的文件排序腳本,但這個簡單的腳本比較容易理解:
若要在 PowerShell 中執行此操作,請使用如下所示的管道:
Get-ChildItem -Path "C:\Directory" -File | Sort-Object Length -Descending `
| Select-Object -First 5 | Format-Table Name, Length -AutoSize
現在我們有了一個可運行的管道,您可以將其儲存為 PS1 腳本文件,這樣您就不必在每次使用時都會匯入它。
建立 PS1 檔案最簡單的方法是將腳本貼到記事本中,並使用 .ps1 副檔名儲存檔案。
建立 PS1 檔案後,您可以透過執行./ScriptName.ps1在 PowerShell 中使用它:
提示:如果出現權限錯誤,最快的解決方案是在執行腳本時以管理員權限執行 PowerShell。
恭喜!現在您可以建立 PowerShell PS1 腳本了。
閱讀並了解新科技的魅力是一回事,但實際使用又是另一回事!在本文的其餘部分,我們將開發一個 PowerShell 腳本來演示其功能以及如何使用它。
DIR 是CMD.EXE 中最常用的指令之一。此指令顯示父目錄中包含的所有檔案和子目錄(如圖 1 所示)。除了每個物件的名稱外,還提供上次更新日期和時間以及每個檔案的大小等資訊。 DIR 也會顯示目錄中所有檔案的總大小,以及檔案和子目錄的總數。
圖 1
在 PowerShell 中執行 DIR 也會產生如圖 2 所示的目錄列表,但方式略有不同。 PowerShell 沒有 DIR 指令,而是有 Get-ChildItem 指令,它可以執行相同的功能。在 PowerShell 中,DIR 是 Get-ChildItem 的別名。本文不打算討論別名。您可以將 PowerShell 中的 DIR 視為 Get-ChildItem 的縮寫。
PowerShell 中的 DIR 提供了許多與上述相同的資訊:檔案和資料夾清單、它們上次修改的日期和時間以及每個檔案的大小。但是,它缺少 CMD.EXE 中的 DIR 提供的摘要資訊:資料夾中所有檔案的總大小、檔案總數以及子資料夾的總數。
圖 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 字元表示該運算子不區分大小寫。
圖 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
}
圖 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")
圖5:顯示腳本的完整輸出資料。
預測和增強可以
儘管您建立的腳本產生的輸出與 CMD.EXE DIR 命令幾乎相同,但您仍應注意一些注意事項,並且可以進行一些增強。
您可以使用 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 腳本,在每天結束時將下載的檔案按檔案類型分類到資料夾中。
開啟一個新的記事本檔案並貼上以下腳本。確保將腳本中的來源資料夾路徑變更為與下載資料夾路徑相符:
# 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 的人。不過,本文所建立的範例腳本相當簡單。我相信它可以建構和開發得更完善,以服務更複雜的應用程式。
Fn 功能鍵為您提供了一種更快捷、更輕鬆的方式來控制某些硬體功能。
這種不合適的指示燈通常意味著 BitLocker 加密已停用、更新需要重新啟動或韌體升級正在等待處理。
您可以使用以下 6 種方法之一在 Windows 10 上開啟電腦屬性(或系統屬性)。
如果您正確鎖定訪客 Wi-Fi 網絡,您可以與任何訪客共享您的互聯網連接,而無需共享任何其他資訊。
在本文中,WebTech360 將指導您如何關閉 Windows 11 上的防火牆。
你剛買電腦的時候,幾秒鐘就能啟動,運作起來簡直如夢似幻。但隨著時間的推移,情況發生了變化。
本文檔介紹如何刪除 .tmp 文件,而不是如何清除網路歷史記錄或瀏覽器快取。
您可以關閉 Windows 11 背景應用程式以優化效能、節省電池並減少 RAM 消耗。
安裝 VPN 將有助於確保您的 Windows 11 電腦更加安全。
Windows 提供了許多有用的輔助使用選項,非常適合自訂 PC 介面、提高舒適度,甚至完全解放雙手進行操作。
在Windows 10上微軟整合了一個名為「設定」的新應用程序,這個「設定」應用程式是微軟打造的一款Metro應用程序,用於取代經典的「控制面板」應用程式。
系統中的大資料夾是佔用大量系統空間的罪魁禍首之一。許多你建立的資料夾,刪除後過一段時間又會重新出現。這些資料夾很可能是你試圖刪除的垃圾資料夾。
如果您的 ISP 提供的預設 DNS 伺服器速度慢、不安全或不可靠,則無需使用它。以下是如何變更 Windows 11 電腦上的 DNS 伺服器設定。
GodeMode 全稱為「捷徑 Windows 主控制面板」。 GodMode(或上帝模式)是一個控制台,可讓您設定和存取 Windows 作業系統上的所有內容。
若要變更 TP Link 數據機的密碼或 WiFi 名稱,使用者需要登入此數據機線路的位址。那麼 TP Link 數據機的登入位址是什麼呢?
Fn 功能鍵為您提供了一種更快捷、更輕鬆的方式來控制某些硬體功能。
這種不合適的指示燈通常意味著 BitLocker 加密已停用、更新需要重新啟動或韌體升級正在等待處理。
您可以使用以下 6 種方法之一在 Windows 10 上開啟電腦屬性(或系統屬性)。
如果您正確鎖定訪客 Wi-Fi 網絡,您可以與任何訪客共享您的互聯網連接,而無需共享任何其他資訊。
在本文中,WebTech360 將指導您如何關閉 Windows 11 上的防火牆。
你剛買電腦的時候,幾秒鐘就能啟動,運作起來簡直如夢似幻。但隨著時間的推移,情況發生了變化。
本文檔介紹如何刪除 .tmp 文件,而不是如何清除網路歷史記錄或瀏覽器快取。
您可以關閉 Windows 11 背景應用程式以優化效能、節省電池並減少 RAM 消耗。
安裝 VPN 將有助於確保您的 Windows 11 電腦更加安全。
Windows 提供了許多有用的輔助使用選項,非常適合自訂 PC 介面、提高舒適度,甚至完全解放雙手進行操作。
在Windows 10上微軟整合了一個名為「設定」的新應用程序,這個「設定」應用程式是微軟打造的一款Metro應用程序,用於取代經典的「控制面板」應用程式。
系統中的大資料夾是佔用大量系統空間的罪魁禍首之一。許多你建立的資料夾,刪除後過一段時間又會重新出現。這些資料夾很可能是你試圖刪除的垃圾資料夾。
如果您的 ISP 提供的預設 DNS 伺服器速度慢、不安全或不可靠,則無需使用它。以下是如何變更 Windows 11 電腦上的 DNS 伺服器設定。
GodeMode 全稱為「捷徑 Windows 主控制面板」。 GodMode(或上帝模式)是一個控制台,可讓您設定和存取 Windows 作業系統上的所有內容。
若要變更 TP Link 數據機的密碼或 WiFi 名稱,使用者需要登入此數據機線路的位址。那麼 TP Link 數據機的登入位址是什麼呢?