2024/02/20

"Windows\PowerShell\5.1".Split("\\")はOKだけど、"PowerShell\7".Split("\\") はNGな件

OS ディスクやパーティション情報を取得するのに便利かもと思い、こちらのサンプルスクリプト()をパクって参考にしてお勉強中... 

Windows RE に更新プログラム パッケージを追加する
https://learn.microsoft.com/ja-jp/windows-hardware/manufacture/desktop/add-update-to-winre?view=windows-11#extend-the-windows-re-partition

情報の取得とその出力部分だけコピー(スクリプトの# Log message~ # Checking the BackupFolder parameter まで丸ごと)して Windows 11 で実行してみたところ、Windows PowerShell 5.1 では期待通りに動くんですが、PowerShell 7.4.1(旧称、PowerShell Core)だと以下の行でエラーに。

$diskInfo = Get-Disk -number $OSDiskIndex

エラーの原因は...

その少し上の以下の行が、PowerShell Core と Windows PowerShell で動きが異なるみたい。WinREの場所(\\?\GLOBALROOT\device\harddisk1\partition4\Recovery\WindowsRE とか)を \ で分割しているんですけど...

$WinRELocationItems = $WinRELocation.Split('\\')

次のように、PowerShel Core だと "文字列".Split('\\') (Splitメソッド)で分割できていない。

スクリプトの問題の行はSplitメソッドで

$WinRELocationItems = $WinRELocation.Split('\')

または-Split演算子で

$WinRELocationItems = $WinRELocation -Split '\\'

と書き換えてあげれば、PowerShell Core と Windows PowerShell どちらでも問題なく動くように。スクリプトの後半のほうにも同じコードあるのでご注意ください。 

この Split (メソッドの方)の挙動の違いが、バグなのか仕様なのか、分かりません。1月の WinRE 更新プロググラムの出来もアレでしたけど、最近、いろいろと品質劣化というか、テストが足りん、いやしてるの?って感じです。 

こちらにフィードバック済み


0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。