見出し画像

PowerShell 5.1からPowerShell 7.xのコマンドレットを実行するには




PowerShellには2つの系統がある


PowerShellはコンピュータを操作するための強力なツールです。このPowerShellには2つの系統があります。

 PowerShell 5.1 はWindows専用のパワーシェル。
 PowerShell 7.x はWindowsだけでなくMacでも使える新しいパワーシェル。

PowerShellをMacで使っているなんて聞いたことがないので「PowerShellを使う=Windowsで使う」だと思っていいでしょう。統合すればいいのに、なぜか2系統あります。

7.xをインストールする


5.1と7.xはほぼ同じですが別物と扱われていて、両方をインストールして共存させることもできます。
7.xをインストールするにはPowerShell5.1のターミナルで
winget install Microsoft.PowerShell
 とか
winget upgrade Microsoft.PowerShell
 とかを実行すれば最新版が手に入ります。

PowerShell 5.1からPowerShell 7.xのコマンドレットを実行するには


PowerShell 5.1 とPowerShell 7.x はほぼ同じですが7.xでしか動かないコマンドレットがあります。

例えばこれは5.1で動きます
Invoke-RestMethod -Uri https://ipinfo.io

でもこれは動かない
Invoke-RestMethod -Uri https://ipinfo.io -NoProxy

↑プロキシサーバをバイパスするオプションが5.1では動きません。
7.xに切り替えて実行する必要があります。
画面を切り替えるのは面倒くさい、どすればいいか?

先頭にpwsh -command を付けると5.1上で7系コマンドレットが使えます。

pwsh -command Invoke-RestMethod -Uri https://ipinfo.io -NoProxy

次のようなPS1ファイルを用意して実行してみてください

Invoke-RestMethod -Uri https://ipinfo.io -NoProxy

pwsh -command Invoke-RestMethod -Uri https://ipinfo.io -NoProxy

pause

実行結果

Invoke-RestMethod : パラメーター名 'NoProxy' に一致するパラメーターが見つかりません。
発生場所 C:\temp\a.ps1:1 文字:42
+ Invoke-RestMethod -Uri https://ipinfo.io -NoProxy
+                                          ~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Invoke-RestMethod]、ParameterBindingException
    + FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Commands.InvokeRestMethodCommand


ip       : 183.79.248.252
city     : Tokyo
region   : Tokyo
country  : JP
loc      : 35.658581,139.745433
org      : NTT Communications Corporation
postal   : 105-0011
timezone : Asia/Tokyo
readme   : https://ipinfo.io/missingauth

続行するには、Enter キーを押してください...:


スクリプトの一行目は失敗して、2行目は成功していることが分かります。



PowerShellは1系統に統一してほしいです。



PowerShellの参考書
 アマゾン読み放題に入っていれば全部無料です↓↓↓↓



#PowerShell #コマンドレット #PowerShell5 .1 #PowerShell7 .x #プログラミング #Windows #毎日Note #毎日更新



この記事が気に入ったらサポートをしてみませんか?