Как определить Linux, macOS или Windows в PowerShell?

Я использую uname -s в сценариях bash для определения ОС и возвращает Linux, Darwin или MINGW64_NT... при работе в Linux, macOS или Windows.

EDIT0: я хочу свой $PROFILE скрипт для определения ОС, запущена ли ОС в Windows с PS (версия может быть ниже 6) или Linux с PSv>=6.

Я нашел это в PowerShell:

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

В Linux возвращается Unix а на 64-битной Windows он возвращает Win32NT.

В моем распоряжении нет macOS (пока:)), поэтому я не знаю, что она на самом деле возвращает на macOS.

EDIT1: этот метод, похоже, не отличается между Unix и Linux или Windows32b и Windows64b.

Какие еще есть способы обнаружения ОС в PowerShell 5.1?

1 ответ

Решение

Проблема в Powershell 5.1.

Подробно здесь: https://devblogs.microsoft.com/scripting/powertip-determine-your-version-of-powershell-and-host-operating-system/

Подробнее здесь: Определите версию ОС, Linux и Windows из Powershell

Powershell 5.1 не имеет возможности или возможности определять ОС вне среды Microsoft. Лучшее, что вы можете сделать, это использовать get-wmi или cim-sesssion

 windows 
 !windows

Для PowerShell Core (Powershell версии 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.

Другие вопросы по тегам