Определение версии ОС, Linux и Windows из Powershell
как определить тип ОС (Linux, Windows) с помощью Powershell из сценария?
ResponseUri не распознается, когда эта часть моего скрипта запускается на хосте Linux.
$UrlAuthority = $Request.BaseResponse | Select-Object -ExpandProperty ResponseUri | Select-Object -ExpandProperty Authority
поэтому я хочу If
оператор для определения типа ОС, который будет выглядеть примерно так:
If ($OsType -eq "Linux")
{
$UrlAuthority = ($Request.BaseResponse).RequestMessage | Select-Object -ExpandProperty RequestUri | Select-Object -ExpandProperty host
}
Else
$UrlAuthority = $Request.BaseResponse | Select-Object -ExpandProperty ResponseUri | Select-Object -ExpandProperty Authority
Я мог бы использовать Get-CimInstance Win32_OperatingSystem
но он не будет работать в Linux, поскольку он не распознается.
4 ответов
разве нет переменных среды, которые вы можете просматривать на других платформах для ОС?
Get-ChildItem -Path Env:
в частности, в Windows, по крайней мере, есть переменная среды ОС, поэтому вы должны быть в состоянии сделать это с помощью $Env:OS
С некоторых пор прошло и то PowerShell Core продукт теперь GA (6.0.*
), вы можете более точно определить свою платформу на основе следующего автоматического логического переменные:
$IsMacOS
$IsLinux
$IsWindows
начиная с версии PowerShell 6.1 на Windows / Linux / OSX пошел в GA вы можете использовать новые свойства $PSVersionTable
, OS
, Platform
и GitCommitId
обновление в V6.0.0-бета.3 есть некоторые breaking changes
:
- изменить позиционный параметр для powershell.exe из-Command в-File
$PSVersionTable
on:
платформа 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:
чтобы получить список.Специфичные для ОС, которые я вижу сейчас, являются $IsLinux
, IsMacOS
и $IsWindows
. Это по крайней мере PowerShell версии 6.0.0-rc и выше для Mac/Linux.
вы можете увидеть список того, что доступно, используя только Get-Variable
(в новом сеансе без загрузки вашего профиля, Если вы просто хочу встроенный по умолчанию).
когда вам нужно только проверить, является ли это windows или linux, возможно, вы могли бы использовать это (быстро и грязно):
if ([System.Boolean](Get-CimInstance -ClassName Win32_OperatingSystem -ErrorAction SilentlyContinue))
{
#windows
}
else
{
#Not windows
}