Powershell에서 OS 버전, Linux 및 Windows 확인
스크립트 내에서 Powershell을 사용하여 OS 유형(Linux, Windows)을 확인하려면 어떻게 해야 합니까?
스크립트의 이 부분이 Linux 호스트에서 실행될 때 ResponseUri가 인식되지 않습니다.
$UrlAuthority = $Request.BaseResponse | Select-Object -ExpandProperty ResponseUri | Select-Object -ExpandProperty Authority
그래서 저는.If
다음과 유사한 OS 유형을 결정하는 문장:
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
리눅스에서는 인식되지 않기 때문에 실패할 수 있습니다.
다른 OS 플랫폼에서 볼 수 있는 환경 변수는 없습니까?
Get-ChildItem -Path Env:
특히, 적어도 Windows에서는 OS 환경 변수가 있으므로 다음을 사용하여 이를 수행할 수 있어야 합니다.$Env:OS
.
시간이 어느 정도 흘렀고 PowerShell Core(v6) 제품이 GA 상태이기 때문에(Core 브랜딩이 v7에서 삭제됨) 다음과 같은 자동 부울 변수를 기반으로 플랫폼을 보다 정확하게 결정할 수 있습니다.
$IsMacOS
$IsLinux
$IsWindows
PowerShell Core(PowerShell 버전 6.0+)의 경우 자동 변수를 사용할 수 있습니다.$IsLinux
,$IsMacOS
그리고.$IsWindows
.
예를들면,
if ($IsLinux) {
Write-Host "Linux"
}
elseif ($IsMacOS) {
Write-Host "macOS"
}
elseif ($IsWindows) {
Write-Host "Windows"
}
윈도우즈/리눅스/OSX의 PowerShell 버전 6.1이 GA로 전환되었기 때문에 다음과 같은 새로운 속성을 사용할 수 있습니다.$PSVersionTable
,OS
,Platform
그리고.GitCommitId
v6.0.0-beta.3 업데이트에는 몇 가지가 있습니다.breaking changes
:
- powershell.exe에 대한 위치 매개 변수를 -Command에서 -File로 변경합니다.
$PSVersionTable
다음 날짜에
플랫폼Win32NT
OSMicrosoft 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
OSLinux (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
OSDarwin
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 [Core] 버전 6 이전에는 질문을 통해서만 이 기능이 가능했습니다.직접 NET.이 작업은 한 줄로 수행할 수 있습니다.
[System.Environment]::OSVersion.Platform
다음 중 하나가 반환됩니다.Win32NT
Windows NT(모든 최신 버전의 Windows) 또는Unix
모든 *nix(Mac, 리눅스 및 c. 포함)에 사용할 수 있습니다.만약 그것이 다시 돌아온다면,Unix
그러면 분명히 v6+를 실행하고 있으므로 자세한 정보를 얻을 수 있습니다.$PSVersionTable.PSEdition
,$PSVersionTable.Platform
,그리고.$PSVersionTable.OS
자동 변수도 사용할 수 있습니다.$IsLinux
,$IsMacOs
,그리고.$IsWindows
.
제가 가지고 있는 것은 이것입니다.profile.ps1
설정을 통해 이 작업을 쉽게 수행할 수 있습니다.$IsWindows
:
function Get-PSPlatform
{
return [System.Environment]::OSVersion.Platform
}
switch (Get-PSPlatform)
{
'Win32NT' {
New-Variable -Option Constant -Name IsWindows -Value $True -ErrorAction SilentlyContinue
New-Variable -Option Constant -Name IsLinux -Value $false -ErrorAction SilentlyContinue
New-Variable -Option Constant -Name IsMacOs -Value $false -ErrorAction SilentlyContinue
}
}
이 기능은 에서 제공된 대로 모든 버전의 PowerShell에서 작동합니다.버전 1.x 이후의 NET 플랫폼 참조자세한 내용은 ID 설명서를 참조하십시오.
Dave F의 코멘트를 보세요; 저는 SO가 코멘트에서 답변을 홍보하기 위해 작동하는 것처럼 보이기 때문에 이 답변을 작성했습니다.
사실 PowerShell 콘솔 자체에 의해 추가된 글로벌 변수가 있어야 합니다. 하지만 환경 변수로 간주되지 않기 때문에 사용 시 표시되지 않습니다.dir env:
목록을 얻기 위해. 있는 것은 제별보가는지 OS것은입니다.$IsLinux
,IsMacOS
그리고.$IsWindows
Mac/Linux PowerShell 6.0.0-rc 파일입니다.
다음을 사용하여 사용 가능한 목록을 볼 수 있습니다.Get-Variable
(프로파일을 로드하지 않고 새 세션에서 기본 제공되는 기능만 사용하려면).
위의 내용을 바탕으로 Windows에서 실행 중인지 여부만 감지하고 PowerShell 및 PowerShell Core에서 전후 호환되는 스크립트를 원할 경우 다음과 같은 이점이 있습니다.
if ($IsWindows -or $ENV:OS) {
Write-Host "Windows"
} else {
Write-Host "Not Windows"
}
Windows인지 Linux인지만 확인해야 하는 경우에는 다음과 같은 방법을 사용할 수 있습니다(빠르고 더러운 방법).
if ([System.Boolean](Get-CimInstance -ClassName Win32_OperatingSystem -ErrorAction SilentlyContinue))
{
#windows
}
else
{
#Not windows
}
Osx를 위한 몇 가지 다른 방법:
sw_vers -productVersion
10.12.6
또는 (바로 위에 "key - os_version"이 있는데 어떻게 관련되어 있는지 모르겠습니다):
[xml]$xml = system_profiler SPSoftwareDataType -xml
$xml.plist.array.dict.array.dict.string -match 'macos'
macOS 10.12.6 (16G1510)
이것은 다른 답변에 대한 설명에 설명된 문제에 대해 Powershell의 모든 버전에서 작동합니다.
$iswin = $PSVersionTable.Platform -match '^($|(Microsoft )?Win)'
와 함께$False
9인치인
최신 PowerShell 코어가 설치되어 있지 않은 경우 다음과 같은 작은 스크립트 블록을 사용할 수 있습니다.
if ($PSVersionTable.PSVersion.Major -lt 6.0) {
switch ($([System.Environment]::OSVersion.Platform)) {
'Win32NT' {
New-Variable -Option Constant -Name IsWindows -Value $True -ErrorAction SilentlyContinue
New-Variable -Option Constant -Name IsLinux -Value $false -ErrorAction SilentlyContinue
New-Variable -Option Constant -Name IsMacOs -Value $false -ErrorAction SilentlyContinue
}
}
}
$script:IsLinuxEnv = (Get-Variable -Name "IsLinux" -ErrorAction Ignore) -and $IsLinux
$script:IsMacOSEnv = (Get-Variable -Name "IsMacOS" -ErrorAction Ignore) -and $IsMacOS
$script:IsWinEnv = !$IsLinuxEnv -and !$IsMacOSEnv
언급URL : https://stackoverflow.com/questions/44703646/determine-the-os-version-linux-and-windows-from-powershell
'programing' 카테고리의 다른 글
오레오에 알림이 표시되지 않음 (0) | 2023.08.04 |
---|---|
'자산' 폴더에서 sdcard로 파일을 복사하는 방법은 무엇입니까? (0) | 2023.08.04 |
ASP 사용 방법.서버 제어 특성의 NET <%= 태그? (0) | 2023.08.04 |
TSQL의 열에 대한 기본 제약 조건 삭제 (0) | 2023.07.30 |
UIImageView에서 이미지에 맞는 가로 세로 맞춤을 적용한 후 이미지 크기를 확인하는 방법 (0) | 2023.07.30 |