Как определить 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.