Windows 10可開啟「行動熱點(hotspot)」以Wi-Fi分享網路給手機、平板或其他行動裝置,但於開啟狀態下,電腦無法睡眠(sleep),若想讓電腦定時睡眠,又想開啟行動熱點,如何是好?
此時可以撰寫一個批次檔(bat),首先呼叫PowerShell關閉行動熱點,再命令電腦睡眠;配合計時器程式,例如設定1小時後,自動執行批次檔,即可順利睡眠。
計時並自動執行程式的程式,可參閱我寫的上一篇文章:
以下是PowerShell與批次檔撰寫教學!
Stack Overflow上,有網友發問如何撰寫程式碼以關閉行動熱點:
第2個答案,即Elyasaf755的答案,撰寫了開關行動熱點的PowerShell程式碼。
其中,第2段程式碼是「開啟行動熱點」。
第1段程式碼是第2段經「編碼(encode)」所得,應複製並貼上txt文字檔,再變更副檔名以轉為批次檔(bat),執行此批次檔即開啟行動熱點。
第3段程式碼是:若偵測到行動熱點「開啟」則關閉之,若偵測到「關閉」則開啟之。
第4段程式碼是第3段經編碼而得。
下述改寫第3段程式碼,並示範如何編碼及轉換為批次檔。
- 第3段程式碼底部為:
滑鼠按圖片可放大
井號「#」後方文字為註解,PowerShell不執行
- 灰底色這一段,我不需要,刪除灰底色的,程式碼變成:
- 承步驟2,複製全部程式碼,並開啟PowerShell,再輸入:
$Command = @'
程式碼
'@
再按Enter,如下圖所示:
首尾兩者「@'」、「'@」作用為何?
據微軟官方之「引號規則」和我實驗,必須如此撰寫才可正確執行,否則之後的程式碼將出錯且無法執行!
- 複製以下兩行程式碼至PowerShell,並按Enter:
$Bytes = [Text.Encoding]::Unicode.GetBytes($Command)
$Encoded = [Convert]::ToBase64String($Bytes)
- 輸入「$Encoded」按Enter,得到編碼後的程式碼,如下圖所示:
須複製程式碼,勿關此PowerShell視窗
- 新增一個txt純文字文件
首行寫「powershell.exe -encodedCommand 」和一個空格,然後不換行,複製並貼上步驟5之「編碼後的程式碼」。
末行寫「powercfg -hibernate off | Rundll32.exe Powrprof.dll, SetSuspendState Sleep」
如下圖所示:
- 變更文字文件的副檔名為「bat」,例如:「關閉行動熱點並睡眠.bat」
- 參閱我寫的上一篇文章:分享好用的自動關機程式:KShutdown
配合KShutdown,定時執行此批次檔,即可自動關閉行動熱點並休眠。