2017-06-22 31 views
5

Jak określić typ systemu operacyjnego (Linux, Windows) przy użyciu Powershell w skrypcie?Określić wersję systemu operacyjnego, Linux i Windows z Powershell

ResponseUri nie jest rozpoznawany, gdy ta część mojego skryptu jest uruchomiona na hoście Linux.

$UrlAuthority = $Request.BaseResponse | Select-Object -ExpandProperty ResponseUri | Select-Object -ExpandProperty Authority 

Więc chcę się sprawozdania If określić typ systemu operacyjnego, który będzie wyglądać podobnie do tego:

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 

mogę używać Get-CimInstance Win32_OperatingSystem ale to nie działać na Linuksie, jak to nie jest rozpoznawane.

+0

nie 'dostać-host' zawierać te dane? – 4c74356b41

+0

[To może być przydatne] (http://www.sqlserver-dba.com/2012/06/how-to-check-operating-system-type-with-powershell.html) – gms0ulman

+0

Nie mogę powiedzieć. Ani z dokumentacji [link] (https://msdn.microsoft.com/en-us/powershell/reference/5.1/microsoft.powershell.utility/get-host) – boomcubist

Odpowiedz

5

Czy nie istnieją zmienne środowiskowe, które można wyświetlić na innych platformach systemu operacyjnego? GCI ENV:

Szczególnie, Windows co najmniej, istnieje zmienna OS, więc powinny móc tego dokonać za pomocą:

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

lub prościej (w wierszu)

$env:OS 
+0

Próbowałem tego na początku, i zwrócił "Windows_NT" na moim komputerze z Windows 8.1 ... Zakładam, że OP jest po więcej szczegółów. – gms0ulman

+1

@ gms0ulman Wygląda na to, że zgłasza Windows_NT na dowolnym polu Windows. Myślę, że OP szuka jednego kontra drugiego, ponieważ nie pytał o coś w stylu "Czy jestem na Windows 10 lub Ubuntu?" – TheIncorrigible1

+0

To jest idealne. Mogę to zrobić 'If (" $ ($ ENV: OS) "-ne $ null)' - zwraca null w systemie Linux, więc jeśli nie jest null, to Windows!Dzięki. – boomcubist

1

Gdy trzeba tylko sprawdzić, czy jest to system Windows lub Linux, być może można go użyć (szybkie i brudne):

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

Od wersji PowerShell na Linux/OSX powinien zostać zaktualizowany do najnowszej wersji beta można korzystać z nowych właściwości $PSVersionTable, OS, Platform i GitCommitId

aktualizacji W V6.0.0-beta.3 istnieją pewne breaking changes

  • Zmień parametr pozycyjny dla powershell.exe od -polecenie do -file

Platformę 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                             

Platforma 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                         

Platforma 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

To nie pomoże, gdy uruchomisz PowerShell przed wersją 6. – lit

+0

@lit Nieobecność/obecność '$ env: OS' powie coś innego jak brak/obecność' $ PSVersionTable.Os' lub '$ PSVersionTable.Platform ' – LotPings

+0

@LotPings - Tak, możliwe jest odszyfrowanie platformy z szerokiego zbioru rzeczy obecnych i rzeczy nie. Brzmi jak temperamentalny kod do napisania, a jeszcze bardziej porywczy do utrzymania. – lit

Powiązane problemy