私のコンピュータサイエンスの教授がクイズを出しましたが、質問の1つは「正誤問題:PowerShellはWindows、Mac、Linuxで動作する」でした。正解は「偽」でした。彼は、PowerShellはWindowsのものにすぎないと主張しています。しかし、ここに別の言い方をするいくつかのウェブサイトがあります:
https://Azure.Microsoft.com/en-us/blog/powershell-is-open-sourced-and-is-available-on-linux/
https://github.com/PowerShell/PowerShell
では、どちらが正しいのでしょうか。 PowerShellはWindowsだけでなくLinuxとMacでも機能しますか?
PowerShellの多くは.NETであるため、共通言語ランタイム(CLR)を備えた任意のオペレーティングシステムで実行できます。 Windowsでは、これが.NETFrameworkです。他のオペレーティングシステム(Linuxを含む!)の場合は、.NET Frameworkのオープンソースのクロスプラットフォームサブセットである CoreCLR を使用できます。
GitHubのPowerShellリポジトリにあるように、かなりの数のOSとディストリビューションがサポートされています。たとえば、 buntuの手順は次のとおりです 。デモンストレーション( ソースページ ):
Windows以外の環境では、PowerShellのallが利用できるわけではないと主張する人もいるかもしれません。一部の機能は、Windowsでのみ見られるライブラリに依存しています。たとえば、Invoke-WebRequest
によって返されるParsedHtml
タイプのHtmlWebResponseObject
プロパティは、アンマネージライブラリ(具体的にはmshtml.dll
)からのCOMオブジェクトを保持するため、Windowsでのみ役立ちます。他のプラットフォームでは、そこには何もありません。そしてもちろん、最新のアプリ(Get-AppxPackage
やその仲間たち)のように、Windowsでしか見られないシステムを管理するためのコマンドレットもあります。
それでも、PowerShellインフラストラクチャは他のオペレーティングシステムでは完全に正常に機能します。たくさんのコマンドレットがどこでも使用でき、サポートはますます良くなっています。
Macos(6 alpha)用の最新のPowerShellは、より優れた.netサポートを備えています。ただし、Sierraosxでのみ機能します。たとえば、これは以前は機能しなかった場所で機能するようになりました。
$ping = New-Object System.Net.Networkinformation.ping
$ping.Send('yahoo.com', 500) # timeout 500 ms
[Net.DNS]::GetHostEntry('yahoo.com')
ただし、デフォルトのコンソールの色はひどいものです(コマンドの場合は黄色など)。
set-psreadlineoption command darkyellow