スキップしてメイン コンテンツに移動

投稿

2024の投稿を表示しています

Windows 11のインストール失敗 (0xC1900101 - 0x30018)

TPM2.0未対応の自作パソコンにWindows 11をインストールする方法はいろんなサイトで紹介されています。 筆者の古い自作PCもせっかくなのでWindows 11にアップグレードを試してみました。PCは下記のような構成です。 マザーボード: TA890GXE CPU: Phenom II X4 910e メモリ: DDR3-1333 4GB x 2 HDD: Seagateの2TB 筆者は下記の動画で紹介されているようにWindows 11のISOイメージをダウンロードして、そこから appraiserres.dll の中身を空ファイルにすることで、TPM2.0のチェックを回避する方法でインストールを試みました。 【23H2対応】古いパソコンをWindows11へアップグレードさせる方法【簡単】 (youtube.com) インストールまでは完了したのですが、Windows 11の初期起動に失敗したというメッセージが出て、Windows 10に強制的にロールバックされてしまいました😭。 ロールバックされたWindows 10に下記のダイアログが表示されました。 Windows 11をインストールできませんでした お使いの PC は、Windows 11 のインストールを開始する直前の状態に戻りました。 0xC1900101 - 0x30018 SYSPREP_SPECIALIZE 操作中にエラーが発生したため、インストールは > FIRST_BOOT フェーズで失敗しました。 ネット上を色々検索したところ、上記のエラーはハードウェアのドライバがWindows 11に対応していないことが原因の可能性が高いというところまでは当が付きました。 インストール失敗のログからデバイスIDを割り出して特定する方法が王道のようですが、筆者の技量では、ログを見てもすぐに原因となるデバイスを特定できませんでした。 周辺機器はゼロの状態だったこともあり、ならば、しらみつぶしにということで、Windows 10の時点で、サウンド、チップセットのグラフィックとドライバを変えていって、最後にマザーボードに載っているRealtekネットワークドライバをRealtekのサイトから ダウンロード したものに変えたところ無事インストール、エラ

PowerShellのStart-Processで起動したプロセスのExitCodeを取得する方法

PowerShellのStart-Processで起動したプロセスのExitCodeの取得方法を下記に示します。 $p = Start-Process - NoNewWindow - PassThru - FilePath "some_exe" $dummy = $p . Handle # Cache the handle $p . WaitForExit ( ) Write-Host " $p .ExitCode" 「なんでこんな単純なことを記事にするの?」と思う人もいるかもしれませんが、上記の Cache the handle の行がないと正しいExitCodeは取得できません! -Wait とかをつけてもだめです。 詳細は下記のGitHubのissueを参考にしてください。 https://github.com/PowerShell/PowerShell/issues/20400#issuecomment-1740954070

PowerShellでStart-Processで起動したアプリケーションのログをファイルとコンソールの両方に出力

はじめに PowerShell上で Start-Process コマンドを使って起動したアプリケーションは -RedirectStandardOutput や RedirectStandardError オプションを指定することで、ログを ファイルに出力 できます(コンソールには出力できないので注意)。 このログを同時にコンソールにも表示させたかったのですが、思いのほか苦戦したので備忘録として共有します。 できた方法 結局出力されたログファイルを、別起動したプロセスでTailするという方法を採用しました。 下記はsomethig.logに書き込みつつ同時にコンソールにもログの内容を出力するPowerShellの例です。 try { $logJobObj = Start-Job - ScriptBlock { Get-Content - Path ".\something.log" - Wait } $mainProcessObj = Start-Process - PassThru - FilePath process . exe - ArgumentList "-something_argument... -RedirectStandardOutput " . \something . log " RedirectStandardError " . \something . log" / / アプリケーションが終了するまで待つ While ( ! $mainProcessObj . HasExited ) { / / ログをTailしているJobの出力を受け取る Receive-Job $logJobObj / / 適当な秒数待つ Start-Sleep - Seconds 1 } Receive-Job $logJobObj } finally { if ( $logJobObj ) { Receive-Job $logJobObj / / ログをTailしているJobを終了 Stop-Job $logJobObj Re