2017-06-22 67 views
5

如何从脚本中使用Powershell来确定操作系统类型(Linux,Windows)?从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上失败。

+0

不'得到-host'包含数据? – 4c74356b41

+0

[这可能有用](http://www.sqlserver-dba.com/2012/06/how-to-check-operating-system-type-with-powershell.html) – gms0ulman

+0

不是我能说的。也不是从文档[链接](https://msdn.microsoft.com/en-us/powershell/reference/5.1/microsoft.powershell.utility/get-host) – boomcubist

回答

5

您是否可以在其他平台上查看OS的环境变量? GCI ENV:

特别是在Windows至少,有一个操作系统环境变量,所以你应该能够通过使用来实现:

Write-Output "$($ENV:OS)" 

或者更简单(在提示符)

$env:OS 
+0

我最初尝试过,它返回“Windows_NT”在我的Windows 8.1机器上...我认为OP是更详细的。 – gms0ulman

+1

@ gms0ulman它看起来像在任何Windows盒子上报告Windows_NT。我认为OP正在寻找一个与另一个相比,因为他并没有在“我是在Windows 10还是在Ubuntu上? – TheIncorrigible1

+0

这是完美的。我可以这样做:If(“$($ ENV:OS)”-ne $ null)' - 它在Linux上返回null,所以如果它不为null,那么它就是Windows!谢谢。 – boomcubist

1

当你只需要检查它是Windows还是Linux,也许你可以使用这个(快速和肮脏):

if ([System.Boolean](Get-CimInstance -ClassName Win32_OperatingSystem -ErrorAction SilentlyContinue)) 
{ 
    #windows 
} 
else 
{ 
    #Not windows 
} 
3

由于在Linux/OSX PowerShell的版本应该被更新到最新的测试版,您可以使用的$PSVersionTableOSPlatformGitCommitId

更新新的属性在V6.0.0-beta.3有一些用于从-Command powershell.exe breaking changes

  • 更改位置参数到-file

平台Win32NT OS Microsoft Windows 10.0.15063

PS C:\Program Files\PowerShell\6.0.0-beta.3> $PSVersionTable 

Name       Value 
----       ----- 
PSVersion      6.0.0-beta 
PSEdition      Core 
GitCommitId     v6.0.0-beta.3 
OS        Microsoft Windows 10.0.15063 
Platform      Win32NT 
PSCompatibleVersions   {1.0, 2.0, 3.0, 4.0...} 
PSRemotingProtocolVersion  2.3 
SerializationVersion   1.1.0.1 
WSManStackVersion    3.0 

PS> $PSVersionTable                             

平台Unix OS Linux (ubuntu)

Name       Value                        
----       -----                        
PSVersion      6.0.0-beta                       
PSEdition      Core                         
GitCommitId     v6.0.0-beta.3                      
OS        Linux 4.4.0-79-generiC#100-Ubuntu SMP Wed May 17 19:58:14 UTC 2017         
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> $PSVersionTable 
> 
Name       Value 
----       ----- 
PSVersion      6.0.0-beta 
PSEdition      Core 
GitCommitId     v6.0.0-beta.3 
OS        Darwin 16.6.0 Darwin Kernel Version 16.6.0: Fri Apr 14 16:21:16 PDT 2017; root:xnu-37... 
Platform      Unix 
PSCompatibleVersions   {1.0, 2.0, 3.0, 4.0...} 
PSRemotingProtocolVersion  2.3 
SerializationVersion   1.1.0.1 
WSManStackVersion    3.0 
+0

当在版本6之前的PowerShell上运行时,这将无济于事。 – lit

+0

@lit缺少/存在'$ env:OS'会告诉不同的情况,因为缺少/存在$ PSVersionTable.Os或$ PSVersionTable.Platform @ – LotPings

+0

@LotPings - 是的,它可能是从一些广泛的东西存在和不存在的东西解密平台。听起来像写气质气质的代码,甚至更维持气质。 – lit

相关问题