LoginSignup
0
1

More than 5 years have passed since last update.

Powershell2.0ではまったReadKey

Last updated at Posted at 2018-04-19

Powershell2.0ではまったReadKey

  • バージョンは調べて最新にしておこう
  • 便利そうなコマンドは既にある

という話。

 Powershell 逆引き - Qiitaのコメント欄で教えていただいたReadKeyを使った擬似Pauseを試そうとしたところ、次のようなエラーが……。

PAUSE_IN_PS1
Write-Host "Press any key to continue ...";$x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
エラー例
PS C:\> Write-Host "Press any key to continue ...";$x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
Press any key to continue ...
"1" 個の引数を指定して "ReadKey" を呼び出し中に例外が発生しました: "メソッドまたは操作は実装されていません。"
発生場所 :1 文字:71
+ Write-Host "Press any key to continue ...";$x = $host.UI.RawUI.ReadKey <<<< ("NoEcho,IncludeKeyDown")
    + CategoryInfo          : NotSpecified: (:) []MethodInvocationException
    + FullyQualifiedErrorId : DotNetMethodException

 調べてみたところ、Version2.0ではこの機能がサポートされていない模様。1
 確認してみたところ…うんまぁドハマり…。

バージョン確認
PS C:\> $PSVersionTable

Name                           Value
----                           -----
CLRVersion                     2.0.50727.8669
BuildVersion                   6.1.7601.17514
PSVersion                      2.0
WSManStackVersion              2.0
PSCompatibleVersions           {1.0, 2.0}
SerializationVersion           1.1.0.1
PSRemotingProtocolVersion      2.1

 Windows PowerShell のインストールからWMF 5.1のインストーラーを貰ってきてPowershellのバージョンをあげようとしたら、WMF 5.1 requires .Net 4.5.ということでして……。

WMF5.1インストール失敗
PS C:\Win7AndW2K8R2-KB3191566-x64> .\Install-WMF5.1.ps1
警告: WMF 5.1 requires .Net 4.5.
C:\Win7AndW2K8R2-KB3191566-x64\Install-WMF5.1.ps1 : WMF 5.1 cannot be installed as pre-requis
ites are not met. See Install and Configure WMF 5.1 documentation: https://go.microsoft.com/fwlink/?linkid=839022
発生場所 :1 文字:21
+ .\Install-WMF5.1.ps1 <<<<
    + CategoryInfo          : InvalidOperation: (C:\...-x64.msu:String) [Install-WMF5.1.ps1]Invali
    dOperationException
    + FullyQualifiedErrorId : Install-WMF5.1.ps1

 .NET4.5.2を入れるところからスタートになりました。.NET Framework のインストールより.NET4.5.2のインストーラーを取ってきてインストール→再起動。
Install-WMF5.1.ps1をもう一度たたいてWMF5.1をインストール→再起動。

 結果、バージョンはあがりました。

バージョン確認
PS C:\>  $PSVersionTable

Name                           Value
----                           -----
PSVersion                      5.1.14409.1005
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.14409.1005
CLRVersion                     4.0.30319.34209
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1

 しかしISEで実行するとまたしても失敗。

ReadKey動かない……
PS C:\N> Write-Host "Press any key to continue ...";$x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
Press any key to continue ...
Exception calling "ReadKey" with "1" argument(s): "メソッドまたは操作は実装されていません。"
At line:1 char:44
+ ... to continue ...";$x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
+                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : NotImplementedException

 このワンライナーをPauseIN.ps1として保存してコマンドラインから実行させることでうまくいきました。

PauseIN.ps1
PS C:\> .\PauseIN.ps1
Press any key to continue ...
(ここで応答を待つ)

オチ

 いろいろがんばりましたが、Powershellのバージョンを最新にしておくとちゃんとpauseが入っているようです。

PauseIN.ps1
PS C:\> pause
Press Enter to continue...:
(ここで応答を待つ)

参考

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1