2017-06-22 174 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