如何确定使用PowerShell在脚本中的操作系统类型,(Linux操作系统,Windows)中?
当我的脚本的这一部分在Linux主机上运行的ResponseUri无法识别。
$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上失败。
不存在环境变量,您可以在其他平台上的操作系统查看?
Get-ChildItem -Path Env:
特别是,在Windows至少,有一个操作系统环境变量,所以你应该能够使用$Env:OS
做到这一点
由于一段时间已经过去了,PowerShell核心产品是GA现在(6.0.*
),可以更准确地确定你的平台基于以下自动布尔变量:
$IsMacOS
$IsLinux
$IsWindows
由于PowerShell的版本6.1 Windows/Linux/OSX去GA你可以使用$PSVersionTable
,OS
,Platform
和GitCommitId
的新特性
更新V6.0.0中,beta.3有一些breaking changes
:
$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:
获得list.The操作系统特定的那些我看到现在,当他们不露面是$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
}
对于PowerShell Core(Powershell的版本6.0+),你可以使用Automatic Variables:$IsLinux
,$IsMacOS
和$IsWindows
。
例如,
if ($IsLinux) {
Write-Host "Linux"
}
elseif ($IsMacOS) {
Write-Host "macOS"
}
elseif ($IsWindows) {
Write-Host "Windows"
}