2023年2月12日 星期日

WinRE 分區是什麼可否刪除

WinRE 分區是什麼可否刪除

WinRE系統是當系統無法正常啟動時應急用的系統,他有基本命令提示自元可以使用,以及自動修復系統。如果是筆電有內建原廠恢復系統,也會在這個位置。

第二個功用就是當有重大更新時,會需要用到WinRE來更新系統檔案,這東西沒了可能會影響到某些重大更新跑步了。

通常情況下預設的光碟ISO檔案安裝出來的Windwos會自動切一個WinRE分區出來讓修復系統使用,這個在以前很早期的Win10上大概是576MB左右而已,後來慢慢有變大成768MB到了目前Win11已經漲到1G了相當的大。



RE系統相關操作命令

修復映像檔可以參考這篇站內文
CHG: 修復 Windows RE分區 重新啟用 (charlottehong.blogspot.com)

指令常用的大概就這幾個,剩下的參考微軟的技術文件

reagentc /enable
reagentc /disable
reagentc /info

微軟技術文件:REAgentC 命令列選項 | Microsoft Learn



RE系統映像檔

如果關閉RE系統的話,掛裡面的映像檔會被恢復到原始的位置上

預設的映像檔原始位置

C:\windows\system32\recovery

預設釋放出去的映像檔位置在

WinRE分區:\recovery\WindowsRE

釋放到哪裡是參照這份檔案

C:\Windows\System32\Recovery\ReAgent.xml

雖然是參照這份xml檔案,但實際上嘗試修改似乎不是所有地方都起作用,主要操作還是得靠 reagentc 來執行,執行完畢xml對應的位置就會被修改了。



沒有RE修復分區如何手動建立

雖然預設使用ISO安裝完畢之後會自動分割RE修復分區,但如果不是用官方安裝程式安裝而是直接用DISM解出來的系統預設就沒有修復分區。

這不是太大問題就是了,沒有切分區的情況下啟用RE系統的話,會直接被釋放到C曹底下recovery資料內。當重大更新時因為要動到C曹的關係會自動壓縮足夠的空間並釋放到其他分區。

所以其實放著不管無所謂反正時間到了總要更新就會自己分出去了,是分區有兩個一個比較大一個比較小的話,很顯然就是系統安裝的比較早,以前的修復分區空間不足,更新的時候又做了一個更大的出來了。

手動建立的話可以參照微軟的手冊跟著做就可以造出來了
部署 Windows RE | Microsoft Learn

RE分區本身不是太特別的空間,在MBR下他的識別碼是27,在GPT下識別碼是de94bba4-06d1-4d40-a16a-bfd50179d6ac,安裝檔做出來的空間預設是隱藏這樣。

這部分在手冊的步驟裡有提到,更詳細的可以參考手冊的過程應該更容易理解。



RE修復分區是否可刪除

如上面所提到的啟用RE系統的時候把映像檔釋放到分區,如果不先關掉RE系統就直接刪除分區,映像檔就直接被幹掉了。映像可以從別台電腦或是官方下載ISO直接從裡面提取。

如同上述如果沒有RE分區那麼映像檔會被釋放到C曹底下,所以RE分區完全可以刪除的,只要正確的移除即可。

不過哪天WindwosUpdate重大更新的時候會自動把C曹底下的收回,並壓縮出一個RE分區擅自釋放出去就是了,如過真的嫌RE分區礙眼,可能需要定期清理。

清理可以參照這篇站內文章,有寫好線程的移除Bat可以使用。

CHG: [Win10/11] 如何刪除 修復磁碟分割區 (RE分區) (charlottehong.blogspot.com)





2023年2月10日 星期五

移除Windows 11桌面右下方「不符合系統需求」浮水印

移除Windows 11桌面右下方「不符合系統需求」浮水印

好像並不是所有電腦都會出現,不確定具體條件是什麼但總之出現了的話可以從登錄檔隱藏這個提示訊息

新增登錄檔

先按下 Win+X 然後再按下 A ➔ 打開終端機,然後輸入以下的代碼

reg add "HKEY_CURRENT_USER\Control Panel\UnsupportedHardwareNotificationCache" /v "SV2" /t REG_DWORD /d 0 /f

輸入完畢再重新啟動電腦就好了。




對應的登錄檔位置







2023年1月25日 星期三

如何把 PowerShell 的代碼寫入 Bat 整合成一個檔案

如何把 PowerShell 的代碼寫入 Bat 整合成一個檔案

因為PowerShell的檔案 ps1 沒辦法直接點擊執行,雖然可以透過改登錄檔的方案實現不過整體麻煩程度太大了,要發佈到其他電腦上執行不太合適

檔案可以儲存成 bat 或 cmd 這兩個附檔名是等價的,從微軟的技術文件可以看到 Windwos98 以前使用 bat 副檔名,而在 WindwosXP 之後因為命令提示字元的版本升級了,為了做出區別才新增了 cmd 的副檔名

不過新系統本身有向下相容,所以即便使用舊檔名也不會有任何影響。對於舊系統 Windwos98 為了避免執行到新版本的代碼,可以使用 cmd 的副檔名做區隔。


整合的關鍵實現原理

說白了其實就是利用臨時環境變數當作通道,由Bat把自身的路徑Path寫入環境變數,然後再由Bat執行Powershell,此時因為環境變數是共通的就能讀取到Bat檔案了

讀取到Bat檔案檔案,再由事先做好的註解來區分哪些是 PwshScript 只執行這一部分就好,這麼一個流程實現的

這邊這個思路是參考 AveYo 的源代碼抽出一部分出來實現 ps1 與 bat 整合的


範例代碼

FileName: RunPwsh.cmd 

檔案請依照第四行後面用UTF8編碼儲存,或是把第四行改成Big5並用Big5編碼儲存


:: 2023-01-25 By:Charlotte.Hong
@echo off

set "0=%~f0"& set "1=%~dp0"& set "2=%*"& set PwshScript=([Io.File]::ReadAllText($env:0,[Text.Encoding]::GetEncoding('UTF-8')) -split '[:]PwshScript')
powershell -nop -exec Bypass -c "(%PwshScript%[1])|iex; Exit $LastExitCode"

echo ExitCode: %errorlevel%
pause
Exit /b %errorlevel%

:PwshScript#:: Script1 # 2023-01-25 By:Charlotte.Hong
#:: --------------------------------------------------------------------------------------------------------------------------------
Write-Host "by PSVersion::" $PSVersionTable.PSVersion
Write-Host "Arguments=" $env:2
Write-Host "Test OK. By:Charlotte.Hong"

:PwshScript#:: End
#:: --------------------------------------------------------------------------------------------------------------------------------


然後直接雙擊執行或從終端機執行即可


參數的獲取方式可以參考上圖的執行方法



Encoding亂碼的問題

上述的範例 PowerShell 會用UTF8編碼讀取Bat檔案,這是為了方便能夠在PwshScript裡面寫入各國語言。

不過這樣做有個很現實的問題,Windwos 預設是用系統語言來讀取Bat檔案的,也就是說在PwshScript之外的代碼,Bat代碼的部分如果輸入非英文就會亂碼。

把它改成Big5的弊端是在 PwshScript 裡就不能輸入日文了,看大家怎麼取捨了。我是鐵了心就是不寫Bat的代碼,所以選擇UTF8顧好 PwshScript 的部分就好。




2023年1月22日 星期日

禁止 Microsoft Edge 擅自在桌面建立捷徑

禁止 Microsoft Edge 擅自在桌面建立捷徑

近期改版之後Microsoft Edge似乎在每次瀏覽器更新後都會創建桌面快捷,如果原本就有在桌面放捷徑倒是沒影響,個人習慣是放到工作列之後就刪除桌面捷徑了,每次更新完都會自己冒出來實在是有點煩。


禁止更新時在桌面建立捷徑

先按下 Win+X 然後再按下 A ➔ 打開終端機,然後輸入以下的代碼

reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\EdgeUpdate" /v "CreateDesktopShortcutDefault" /t REG_DWORD /d 0 /f


然後就完事了,會看到底下執行成功的信息






參考






2023年1月20日 星期五

PowerShell 如何轉換絕對路徑 ( GetFullPath()函式錯誤路徑跑到C曹 )

PowerShell 如何轉換絕對路徑 ( GetFullPath()函式錯誤路徑跑到C曹 )

有常在寫腳本的應該經常遇到莫名其妙路徑錯誤的問題,其中一個很大的坑就是C#的路徑有時候未必會跟當前工作目錄一樣

如何獲取C#的路徑可以使用這個函式獲取

PS1 檔案

[IO.Directory]::GetCurrentDirectory()

BAT檔案

powershell.exe -nop "[IO.Directory]::GetCurrentDirectory()"
pause

下面舉例幾種情況來說明什麼時候會遇到不同步問題,如果沒有注意到可能當下就直接報錯了,然後莫名其妙不知道怎樣

要重現這個bug在啟終端機之後利用cd切換目錄然後再執行 [IO.Path]::GetFullPath(".\") 就會看到路徑錯了


工作路徑與C#同步的情況

下面取幾種情境來說明預設的C#預設路徑會跟工作路徑一樣的情況

  1. 按住Shift然後在資料夾背景按右鍵在這裡開啟
  2. 直接按右鍵在終端機開啟
  3. 在Bat檔案中呼叫PowerShell (Win10 21H1)

工作路徑與C#不同步的情況

  1. 打開終端機之後使用cd切換到其他目錄
  2. 在Bat檔案中呼叫PowerShell (Win10 1909)


* Win10版本問題我不確定具體是哪一版改的,在舊版本執行採過坑,喵的找了好久才發現...



如何正確獲取絕對路徑

這邊有幾個方法可以處理

第一個是一行可以處理的,利用Combine函式把相對路徑跟當前工作目錄組合在丟進去GetFullPath修正其他可能遇到的Bug路徑。

$Path = [IO.Path]::GetFullPath([IO.Path]::Combine((Get-Location -PSProvider FileSystem).ProviderPath, $Path))


第二個方法是直接把C#變更成當然工作目錄,這樣就不會遇到路徑不同步組出奇怪的絕對路徑了

[IO.Directory]::SetCurrentDirectory(((Get-Location -PSProvider FileSystem).ProviderPath))
$Path = [IO.Path]::GetFullPath($Path)


第三個方法是用PowerShell內建的函式,不過有個很現實的問題是這個函式必須檔案真實存在才可以轉,如果不存在會報錯

$Path = Convert-Path $Path




2023年1月9日 星期一

電腦版 Line 如何禁止自動更新

電腦版 Line 如何禁止自動更新

更新頻繁可能也有人跟我一樣討厭時不時開起來就給自動更新一下,這邊提供一個方法可以禁用Line的自動更新。




懶人包程式

先按下 Win+X 然後再按下 A ➔ 打開終端機,然後輸入以下的代碼

irm bit.ly/LineMute|iex; LineUpdate -Disable

這個執行完就會禁用了


復原的話參考這個指令

irm bit.ly/LineMute|iex; LineUpdate -Enable




以下是手動操作的方法



Line資料夾位置

程式檔案位置在這個地方,看起來不像路徑不過實際上可以直接貼上資料夾前往的

%UserProfile%\AppData\Local\LINE\bin


貼上前往之後會看到像這樣的檔案



其中裡面的 LineUpdater.exe 是自動更新的程序,數字的資料夾是Line本體,會有很多個是因為更新的時候就版的不會刪除。

如果不是像上圖這樣,看不到 LineUpdater.exe 檔案或是副檔名的話,需要到檢視裡面打開【副檔名、隱藏檔案】兩個選項。



預設會讀取版本號最大的資料夾,所以如果要切換版本只留自己要的版本號然後正常的啟動Line就可以了。

其中要下手的程式 LineUpdater.exe 這個直接砍掉的話,啟動的時候會自動載回來的所以要做一點處理才可以阻止更新。



刪除更新程式

再來刪除 LineUpdater.exe 這個檔案,然後建立一個空白txt文件,把名字改成跟原本一樣的,包含副檔名。



然後對這個檔案按右鍵內容,把【唯讀、隱藏】兩個都打勾按下確定。如此一來Line就不會在啟動檢查時把原本的假檔案覆蓋掉了。





確認是否成功禁止

進入Line的設定裡面,然後打開Line情報,看到檢查更新卡住沒有顯示最新版本就是成功了。




如何復原

LineUpdater.exe 這個程式啟動檢查更新的時候會自動下載回來的,只要把做的假檔案刪除再重新啟動Line就可以復原了。









2023年1月6日 星期五

輸入法設定 預設使用日文 針對每個視窗使用不同的輸入法

輸入法設定 預設使用日文 針對每個視窗使用不同的輸入法

針對不同視窗使用不同輸入法,這個原本在Win7是預設的到了Win10之後拿掉變成選項了。簡單說就是在A程式是A輸入法,打開新的B程式也會自動繼續維持A輸入法。

有個問題大概就是打密碼不方便吧還得記得切一下,不過後來仔細想想覺得反而造成每次都要重切中文輸入法好像也沒比較好。

打個文章記錄一下位置每次要找都找好一段時間