同じ名前で中身がちがうもの

こんにちは。イメージマジック三浦です。 最近めっきり寒くなってきました。体調には十分に気を付けてください。今日は「同じ名前で中身がちがうもの」と題して書いてみます。

アニメの場合

アニメ作品では、異なる登場人物を同じ声優が担当することがあります。 最近一番驚いたのは、アニメ「ルパン三世」の次元大介役の声優交代の話です(本投稿執筆時点の約3か月前にインターネット記事で出ています)。交代前後の声優は以下の通りです。
  • 交代前:小林清志さん
  • 交代後:大塚明夫さん
お二人はOVA「機動戦士ガンダム0083 STARDUST MEMORY」にて、「デラーズ・フリート」という陣営の上官と部下として共演されています。
  • 小林清志さん:エギーユ・デラーズ
  • 大塚明夫さん:アナベル・ガトー
記事を見て 「次元大介の声が デラーズからガトーへ 受け継がれるか」と感じましたが、 「デラーズからガトーへ」というキーワードでインターネット検索すると、この声優交代の情報が出てくるところに反響の大きさを感じました。 劇中、2人の登場人物には深い信頼関係があったので、熱い気分になりました。

PowerShellの場合

話はPowerShellに変わります。こちらは、はまりポイントになったいう話です。

きっかけ

Windows11がWindows Updateから利用できるようになったのを受けて、自分の作業用PCをWindows11にアップグレードしました。 そのPCで自社開発アプリの動作確認を実施していましたが、アプリの1つでPowerShellスクリプトが動かないエラーが出ました。
このシステムではスクリプトの実行が無効になっているため、ファイル XXXX を読み込むことができません。
PowerShellの実行権限が無いときに出るエラーメッセージです。

調査してみる

実行権限の不足ということで、普段使っているPowerShellでLocalMachineに「RemoteSigned」を設定してみたが動きません。
PS C:\> Get-ExecutionPolicy LocalMachine
RemoteSigned
PS C:\>
OS再起動しても動きません。 アプリ開発した人に確認しましたが「PowerShell」の権限設定に問題はなさそうでした。 Windows11ではPowerShellを起動するときに何か特殊な対応が必要なのか?と思って一度は諦めました。

謎が解けた

後日、アプリのログファイルに「PowerShell.exe」と出ているのを見つけて、自分のPCに2種類のPowerShellがいることに気づきました。

2種類の「PowerShell」

2種類のPowerShellとは以下の通りです。
  • Window10プリインストール版
    • PowerShell5.1
    • プロセス名は「powershell.exe」
  • 普段使っているPowerShell(後でインストールした後継版)
    • PowerShell7.2
    • プロセス名は「pwsh.exe」
「powershell.exe」 と「pwsh.exe」は、それぞれでスクリプト実行権限を管理していて、一方で権限を開放しても他方に反映されません。 「普段使っているPowerShell」=「pwsh.exe」で権限を開放しても、「powershell.exe」には一切効果なし。そして 「powershell.exe」 がスクリプト実行権限を開放していなかったので、
このシステムではスクリプトの実行が無効になっているため、ファイル XXXX を読み込むことができません。 
が延々と出ていました。実際に「powershell.exe」で実行権限を開放したら、無事に動きました。

「謎」の正体

今回の謎の正体は「PowerShell違い」でした。幸いにして特殊な対応は不要でした。

2つのPowerShellの見分け方

最後に2つのPowerShellの見分け方をご紹介します。
※本記事執筆当時、三浦の作業用PCで確認した動作です。Windows UpdateやPC本体の設定により異なる可能性があります。

起動直後のメッセージ

  • powershell.exe は「新機能と改善のために最新の PowerShell をインストールしてください!」とメッセージを表示します。
  • pwsh.exe は「PowerShell 7.2.0」のように、バージョン番号を先頭行に表示します。

バージョン番号

このコマンドでPowerShellのバージョン番号が分かります。
$PSVersionTable | find --% "PSVersion"
powershell.exe
PS C:\> $PSVersionTable | find --% "PSVersion"
PSVersion                      5.1.22000.282
PS C:\>
pwsh.exe
PS C:\> $PSVersionTable | find --% "PSVersion"
PSVersion                      7.2.0
PS C:\>

最後に

PowerShell5.1, PowerShell7.2, どちらも「PowerShell」と呼んで間違いではないので、混乱したという話でした。
「PowerShell」と呼ばれる異なるバージョンのアプリが同居している可能性を常に考えておきたい、と思った出来事でした。 本日は以上です。