GNU/Linux >> Linux の 問題 >  >> Linux

Powershell から OS バージョン、Linux および Windows を判別する

Windows/Linux/OSX 上の PowerShell バージョン 6.1 が GA になったため、$PSVersionTable の新しいプロパティを使用できます。 、 OSPlatformGitCommitId

更新 v6.0.0-beta.3 には breaking changes がいくつかあります :

  • powershell.exe の位置パラメータを -Command から -File に変更

$PSVersionTable オン :

プラットフォーム Win32NT OS Microsoft Windows 10.0.15063

PS C:\Users\LotPings> $PSVersionTable

Name                           Value
----                           -----
PSVersion                      6.1.0
PSEdition                      Core
GitCommitId                    6.1.0
OS                             Microsoft Windows 10.0.17134
Platform                       Win32NT
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1
WSManStackVersion              3.0

プラットフォーム Unix OS Linux (ubuntu)

PS /home/LotPings> $PSVersionTable

Name                           Value
----                           -----
PSVersion                      6.1.0
PSEdition                      Core
GitCommitId                    6.1.0
OS                             Linux 4.15.0-34-generic #37-Ubuntu SMP Mon Aug 27 15:21:48 UTC 2018
Platform                       Unix
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1
WSManStackVersion              3.0

プラットフォーム Unix OS Darwin

PS /Users/LotPings> $PSVersionTable

Name                           Value
----                           -----
PSVersion                      6.1.0
PSEdition                      Core
GitCommitId                    6.1.0
OS                             Darwin 17.7.0 Darwin Kernel Version 17.7.0: Thu Jun 21 22:53:14 PDT 2018; root:xnu-4570.71.2~1/RE...
Platform                       Unix
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1
WSManStackVersion              3.0

実際には、PowerShell コンソール自体によってグローバル変数が追加されているはずです。ただし、これらは環境変数とは見なされないため、dir env: を使用すると表示されません。 リストを取得します。私が今見ている OS 固有のものは $IsLinux です 、 IsMacOS$IsWindows .これは、Mac/Linux 用の少なくとも PowerShell バージョン 6.0.0-rc 以降のものです。

Get-Variable を使用するだけで、利用可能なもののリストを表示できます (デフォルトで組み込まれているものだけが必要な場合は、プロファイルをロードせずに新しいセッションで)。


PowerShell Core (Powershell バージョン 6.0 以降) の場合、自動変数を使用できます:$IsLinux$IsMacOS$IsWindows .

たとえば、

if ($IsLinux) {
    Write-Host "Linux"
}
elseif ($IsMacOS) {
    Write-Host "macOS"
}
elseif ($IsWindows) {
    Write-Host "Windows"
}

OS の他のプラットフォームで表示できる環境変数はありませんか?

Get-ChildItem -Path Env:

特に、少なくとも Windows では、OS 環境変数があるため、すべき $Env:OS を使用してこれを達成できる .

しばらく経ち、PowerShell コア (v6) 製品は現在 GA です (コア ブランディングは v7 の時点で削除されているため、次の自動ブール変数に基づいてプラットフォームをより正確に判断できます:

$IsMacOS
$IsLinux
$IsWindows

Linux
  1. OSとLinuxのバージョンを確認する方法

  2. malloc() から行われる Windows および Linux のネイティブ OS/システム呼び出しは何ですか?

  3. Linux のコマンドラインからワイヤレス ネットワーク名を決定する

  1. LinuxとWindowsをデュアルブートする方法

  2. Linux および Windows からの DELL サービス タグおよびエクスプレス サービス コードの表示

  3. Linux 内から BIOS バージョンを取得する方法はありますか?

  1. メインフレーム上のLinux:当時と現在

  2. Windows、MacOS、およびLinuxでDNSキャッシュをクリア(フラッシュ)する方法

  3. Linuxでカーネルバージョンを確認する方法