如何在 powershell 中检测 Linux 或 macOS 或 Windows?

How to detect Linux or macOS or Windows in powershell?

我在 bash 脚本中使用 uname -s 来确定 OS 和它 returns Linux,达尔文或 MINGW64_NT...当 Linux、macOS 或 Windows.

上的 运行

EDIT0 :我希望我的 $PROFILE 脚本检测 OS 是否 运行 在 Windows 和 PS 上(版本可能低于 6 ) 或 Linux 且 PSv>=6.

我在 powershell 中找到了这个:

PS> [System.Environment]::OSVersion.Platform

在 Linux 上,它 returns Unix,在 64 位 Windows 上,它 returns Win32NT.

我没有 macOS 可供使用(还没有:))所以我不知道 macreturns 在 macOS.

EDIT1:此方法在 UnixLinux 或 Windows32b 和 Windows64b 之间似乎没有区别。

还有哪些其他方法可以检测 powershell 5.1 中的 OS?

问题是 Powershell 5.1。

这里有详细说明:https://devblogs.microsoft.com/scripting/powertip-determine-your-version-of-powershell-and-host-operating-system/

此处有更多详细信息:

Powershell 5.1 没有能力也无法在 Microsoft 环境之外确定 OS。你能做的最好的就是使用 get-wmi 或 cim-session

 windows 
 !windows

对于PowerShell Core (Powershell Version 6.0+),您可以使用自动变量:

$IsLinux
$IsMacOS
$IsWindows

使用 6+ 你可以做一些事情来达到以下效果:

   foreach ($i in $info) {
    
    if ($i -eq $IsLinux) {
        Write-Host $i is Linux
    }
    elseif ($i -eq $IsMacOS) {
        Write-Host $i is This is a dirty, dirty Mac
    }
    elseif ($i -eq $IsWindows) {
        Write-Host $i is Windows
    }

   }

为了结束这个问题,您所要求的对于 PowerShell 5.1 来说根本不可能/可能不值得付出努力。