Dado que las versiones 6.1 de PowerShell en Windows/Linux/OSX pasaron a GA, puede usar las nuevas propiedades de $PSVersionTable
, OS
, Platform
y GitCommitId
Actualizar En v6.0.0-beta.3 hay algunos breaking changes
:
- Cambiar el parámetro posicional para powershell.exe de -Command a -File
$PSVersionTable
en :
Plataforma Win32NT
Sistema operativo 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
Plataforma Unix
SO 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
Plataforma Unix
SO 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
En realidad, debería haber variables globales agregadas por la propia consola de PowerShell; sin embargo, no se consideran variables de entorno, por lo que no se mostrarían al usar dir env:
para obtener una lista. Los específicos del sistema operativo que veo ahora son $IsLinux
, IsMacOS
y $IsWindows
. Esta es de al menos PowerShell versión 6.0.0-rc y superior para Mac/Linux.
Puede ver una lista de lo que está disponible usando solo Get-Variable
(en una sesión nueva sin cargar su perfil, si solo desea lo que viene integrado de forma predeterminada).
Para PowerShell Core (Powershell versión 6.0+), puede usar Variables automáticas:$IsLinux
, $IsMacOS
y $IsWindows
.
Por ejemplo,
if ($IsLinux) {
Write-Host "Linux"
}
elseif ($IsMacOS) {
Write-Host "macOS"
}
elseif ($IsWindows) {
Write-Host "Windows"
}
¿No hay variables de entorno que pueda ver en las otras plataformas para el sistema operativo?
Get-ChildItem -Path Env:
En particular, al menos en Windows, hay una variable de entorno del sistema operativo, por lo que debería ser capaz de lograr esto usando $Env:OS
.
Ya que ha pasado algún tiempo y el PowerShell Core (v6) el producto es GA ahora (el Core la marca se eliminó a partir de v7), puede determinar con mayor precisión su plataforma en función de las siguientes variables booleanas automáticas:
$IsMacOS
$IsLinux
$IsWindows