自己解決しました。
スクリプト内でExcelファイルを参照しているのですが、各種オブジェクトを全て解放しなければいけないところで、ワークシート集合のオブジェクト解放が漏れていました。
この解放を追加したところ応答しなくなる現象が起きなくなったので、これが原因だったようです。
このブラウザーはサポートされなくなりました。
Microsoft Edge にアップグレードすると、最新の機能、セキュリティ更新プログラム、およびテクニカル サポートを利用できます。
PowerShellのスクリプトを実行し、スクリプトが終了してから数秒~数十秒後、エクスプローラーなどが固まってしばらくの間応答しなくなります。エクスプローラーであれば、フォルダパスの欄にプログレスバーのグラフが出るか、タイトルバーに「(応答なし)」が表示されるかです。他のウィンドウも「(応答なし)」が出ます。
スクリプト内で何かのリソースを過剰に確保する・解放漏れがあるといったミスを想像しているのですが、こういったミスがあるかどうか、どのような内容のミスか、といったことを調査する方法はないでしょうか。
PowerShellのスクリプトは以下の環境で実行しています。
Windows 10 Pro (21H1)
Name Value
PSVersion 5.1.19041.1023
PSEdition Desktop
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
BuildVersion 10.0.19041.1023
CLRVersion 4.0.30319.42000
WSManStackVersion 3.0
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
ロックされた質問。 この質問は、Microsoft サポート コミュニティから移行されました。 役に立つかどうかに投票することはできますが、コメントの追加、質問への返信やフォローはできません。
自己解決しました。
スクリプト内でExcelファイルを参照しているのですが、各種オブジェクトを全て解放しなければいけないところで、ワークシート集合のオブジェクト解放が漏れていました。
この解放を追加したところ応答しなくなる現象が起きなくなったので、これが原因だったようです。
Hebikuzureさま
Q&Aサイトのご紹介ありがとうございます。
どのようなスクリプトを動作させているのか分かりませんが、普通にデバッグすれば良いのでは?
デバッグの方法はここで取り扱う範囲から外れるので、分からなければ自分で勉強するか、windows-server-powershell - Microsoft Q&A で質問しましょう。
Takashi NISHIIEさま
ご教示ありがとうございます。
メモリは16GB搭載したPCで実行しており、スクリプト実行中・実行後しばらくの間の空きメモリは約10GBありました。
それから子プロセスについてProcess Explorerで確認してみましたが、スクリプト実行はpowershell.exeの子プロセスではなくスレッドで実行している様子でした。このスレッドはスクリプト起動時にCPU使用率が5%程度に上がり、実行後すぐにほぼ0%に下がったまま生き残り、再度スクリプトを起動したときに再利用されているようでした。
どうやら教えていただいた状況とは違った現象が起きているようです。
PowerShell ver.5.1自体結構重いプログラムで900MB以上メモリを消費します。メモリ不足になっていませんか?
あとは、タスクマネージャーやProcess ExplorerなんかでPowerShellやスクリプトから起動した子プロセスが残っていないかどうか確認する程度でしょう。