Как определить, какая версия PowerShell установлена на компьютере, и как проверить, установлен ли PowerShell вообще?
Вы можете определить, какая версия PowerShell установлена, с помощью команды $PSVersionTable в PowerShell, которая отображает подробную информацию о версии, или запустив $PSVersionTable.PSVersion для получения только номера версии. Чтобы проверить, установлен ли PowerShell вообще, можно проверить наличие исполняемого файла PowerShell с помощью команд, таких как powershell --version или найдя путь установки в системных каталогах.
Содержание
- Базовое определение версии PowerShell
- Проверка статуса установки PowerShell
- Методы определения для конкретных платформ
- Расширенная информация о версии
- Скрипты для автоматической проверки версии
- Устранение распространенных проблем
Базовое определение версии PowerShell
Самый простой способ проверить версию PowerShell — выполнить следующую команду в терминале PowerShell:
$PSVersionTable
Эта команда отображает comprehensive таблицу, содержащую подробную информацию о вашей установке PowerShell, включая номер версии, номер сборки и другие релевантные детали. Вывод обычно выглядит так:
Name Value
---- -----
PSVersion 7.4.0
PSEdition Core
GitCommitId 7.4.0
OS Microsoft Windows 10.0.19045
Platform Win32NT
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
WSManStackVersion 3.0
Чтобы получить только номер версии, можно использовать:
$PSVersionTable.PSVersion
Для быстрого отображения версии:
$PSVersionTable.PSVersion.ToString()
Проверка статуса установки PowerShell
Метод 1: Использование команд PowerShell
Если вы подозреваете, что PowerShell может быть не установлен, можно попробовать запустить PowerShell и проверить наличие ошибок:
# Попытка доступа к переменным PowerShell
$PSVersionTable 2>$null
if ($?) {
Write-Host "PowerShell установлен"
} else {
Write-Host "PowerShell недоступен"
}
Метод 2: Проверка из командной строки
Из любого командного файла (cmd.exe) можно проверить установку PowerShell:
powershell --version
Если PowerShell установлен, это отобразит номер версии. Если нет, вы получите сообщение об ошибке.
Метод 3: Проверка каталога установки
Можно проверить установку PowerShell, проверив типичные пути установки:
# Проверка типичных путей установки
$paths = @(
"$env:ProgramFiles\PowerShell\*\pwsh.exe",
"$env:ProgramFiles\PowerShell\*\pwsh.dll",
"$env:ProgramFiles(x86)\PowerShell\*\pwsh.exe",
"$env:ProgramFiles(x86)\PowerShell\*\pwsh.dll"
)
foreach ($path in $paths) {
Get-Item $path -ErrorAction SilentlyContinue | Select-Object -First 1
}
Методы определения для конкретных платформ
Системы Windows
В Windows могут быть установлены как Windows PowerShell (версии 5.1 и ниже), так и PowerShell Core (версии 6+). Вот как различать их:
Для Windows PowerShell:
# Проверка, запущен ли Windows PowerShell
if ($PSVersionTable.PSEdition -eq 'Desktop') {
Write-Host "Запущен Windows PowerShell $($PSVersionTable.PSVersion)"
} else {
Write-Host "Запущен PowerShell Core $($PSVersionTable.PSVersion)"
}
Обнаружение PowerShell 7+:
# Проверка, установлен ли PowerShell 7+
$pwshPath = "$env:ProgramFiles\PowerShell\*\pwsh.exe"
Get-Item $pwshPath -ErrorAction SilentlyContinue | Select-Object -First 1
Системы macOS и Linux
В macOS и Linux доступен только PowerShell Core:
# Проверка версии PowerShell из bash
pwsh --version
# Или проверка, установлен ли PowerShell
which pwsh
В самом PowerShell на этих платформах:
# Информация, специфичная для платформы
$PSVersionTable.Platform
$PSVersionTable.OS
# Проверка, запущена ли система на macOS или Linux
if ($PSVersionTable.Platform -eq 'Unix') {
$unixType = if ($PSVersionTable.OS -like '*Darwin*') { 'macOS' } else { 'Linux' }
Write-Host "Запущена на $unixType"
}
Скрипт определения для кроссплатформенной работы
Вот комплексный скрипт, который работает на всех платформах:
function Get-PowerShellVersion {
param(
[switch]$Detailed
)
if ($PSVersionTable) {
$version = $PSVersionTable.PSVersion
$edition = $PSVersionTable.PSEdition
$platform = $PSVersionTable.Platform
if ($Detailed) {
[PSCustomObject]@{
Version = $version.ToString()
Major = $version.Major
Minor = $version.Minor
Patch = $version.Patch
Build = $version.Build
Revision = $version.Revision
Edition = $edition
Platform = $platform
GitCommitId = $PSVersionTable.GitCommitId
OS = $PSVersionTable.OS
}
} else {
"$edition $version"
}
} else {
"PowerShell не обнаружен"
}
}
# Использование
Get-PowerShellVersion
Get-PowerShellVersion -Detailed
Расширенная информация о версии
Полные свойства версии
Версии PowerShell содержат несколько свойств, предоставляющих подробную информацию:
$version = $PSVersionTable.PSVersion
Write-Host "Основная версия: $($version.Major)"
Write-Host "Второстепенная версия: $($version.Minor)"
Write-Host "Версия исправления: $($version.Patch)"
Write-Host "Номер сборки: $($version.Build)"
Write-Host "Ревизия: $($version.Revision)"
Write-Host "Полная строка версии: $($version.ToString())"
Сравнение версий PowerShell
Можно сравнивать версии PowerShell программно:
function Compare-PowerShellVersion {
param(
[Version]$TargetVersion,
[switch]$OrHigher
)
$currentVersion = $PSVersionTable.PSVersion
if ($OrHigher) {
return $currentVersion -ge $TargetVersion
} else {
return $currentVersion -eq $TargetVersion
}
}
# Примеры
Compare-PowerShellVersion -TargetVersion "7.0.0" -OrHigher
Compare-PowerShellVersion -TargetVersion "5.1" -OrHigher
Обнаружение конкретных функций PowerShell
Разные версии вводят разные функции. Вот как проверить возможности конкретных версий:
# Проверка функций PowerShell 7+
if ($PSVersionTable.PSVersion -ge "7.0.0") {
Write-Host "Доступны функции PowerShell 7+"
# Функции, такие как parallelForEach, тернарный оператор и т.д.
}
# Проверка функций, специфичных для Windows PowerShell
if ($PSVersionTable.PSEdition -eq 'Desktop') {
Write-Host "Доступны функции настольного издания Windows"
# Функции, такие как специфичные для Windows командлеты
}
# Проверка экспериментальных функций
if ($PSVersionTable.ContainsKey('PSVersion') -and
$PSVersionTable.PSVersion -ge "7.2.0") {
Write-Host "Доступны экспериментальные функции"
}
Скрипты для автоматической проверки версии
Комплексный скрипт обнаружения
Вот полный скрипт, который проверяет установку PowerShell и предоставляет подробную информацию о версии:
<#
.SYNOPSIS
Комплексный скрипт обнаружения версии PowerShell
.DESCRIPTION
Обнаруживает установку PowerShell и предоставляет подробную информацию о версии
на всех поддерживаемых платформах
#>
function Get-CompletePowerShellInfo {
[CmdletBinding()]
param(
[switch]$IncludePaths,
[switch]$IncludeAllDetails
)
$result = [ordered]@{
PowerShellDetected = $false
Version = $null
Edition = $null
Platform = $null
OS = $null
InstallationPaths = @()
AdditionalInfo = @{}
}
# Проверка, запущен ли PowerShell
if ($PSVersionTable) {
$result.PowerShellDetected = $true
$result.Version = $PSVersionTable.PSVersion.ToString()
$result.Edition = $PSVersionTable.PSEdition
$result.Platform = $PSVersionTable.Platform
$result.OS = $PSVersionTable.OS
# Получение путей установки
if ($IncludePaths) {
switch ($result.Platform) {
'Win32NT' {
$paths = @(
"$env:ProgramFiles\PowerShell\*\pwsh.exe",
"$env:ProgramFiles(x86)\PowerShell\*\pwsh.exe",
"$env:SystemRoot\System32\WindowsPowerShell\v1.0\powershell.exe"
)
}
'Unix' {
$paths = @(
"/usr/local/bin/pwsh",
"/usr/bin/pwsh",
"/opt/microsoft/powershell/*/pwsh"
)
}
}
foreach ($path in $paths) {
$found = Get-Item $path -ErrorAction SilentlyContinue |
Select-Object -First 1
if ($found) {
$result.InstallationPaths += $found.FullName
}
}
}
# Дополнительная информация
if ($IncludeAllDetails) {
$result.AdditionalInfo = @{
GitCommitId = $PSVersionTable.GitCommitId
PSRemotingProtocolVersion = $PSVersionTable.PSRemotingProtocolVersion
SerializationVersion = $PSVersionTable.SerializationVersion
WSManStackVersion = $PSVersionTable.WSManStackVersion
PSCompatibleVersions = $PSVersionTable.PSCompatibleVersions -join ', '
}
}
}
[PSCustomObject]$result
}
# Примеры использования
Get-CompletePowerShellInfo
Get-CompletePowerShellInfo -IncludePaths -IncludeAllDetails
Кроссплатформенный пакетный скрипт
Для сред, где нужно проверять PowerShell из cmd.exe или bash:
@echo off
REM Обнаружение версии PowerShell для Windows cmd.exe
powershell -Command "if ($PSVersionTable) { $PSVersionTable.PSVersion } else { 'PowerShell не установлен' }" 2>nul
if %ERRORLEVEL% EQU 0 (
echo PowerShell установлен
) else (
echo PowerShell не установлен или отсутствует в PATH
)
#!/bin/bash
# Обнаружение версии PowerShell для Linux/macOS bash
if command -v pwsh &> /dev/null; then
echo "PowerShell установлен"
pwsh --version
else
echo "PowerShell не установлен"
exit 1
fi
Устранение распространенных проблем
PowerShell не найден в PATH
Если команды PowerShell не распознаются, возможно, при установке PowerShell не был добавлен в системный PATH:
Windows:
# Проверка текущего PATH
$env:PATH -split ';'
# Добавление PowerShell в PATH (требует прав администратора)
$pwshPath = (Get-Command pwsh).Source
$env:PATH += ";$pwshPath"
Linux/macOS:
# Добавление PowerShell в PATH
export PATH="$PATH:/usr/local/bin"
# Или для системной установки
sudo ln -s /opt/microsoft/powershell/*/pwsh /usr/local/bin/pwsh
Установлено несколько версий PowerShell
Когда установлено несколько версий PowerShell, может потребоваться указать, какую версию использовать:
# Список всех доступных версий PowerShell
Get-ChildItem "$env:ProgramFiles\PowerShell" |
Where-Object { $_.Name -match '^[0-9]' } |
Select-Object Name, FullName
# Запуск конкретной версии PowerShell
& "$env:ProgramFiles\PowerShell\7\pwsh.exe" -Command "Write-Host 'PowerShell 7'"
Проблемы с правами доступа
На некоторых системах могут возникать проблемы с правами доступа при попытке запустить PowerShell:
# Проверка политики выполнения
Get-ExecutionPolicy
# Установка политики выполнения (требует прав администратора)
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
# Запуск PowerShell с конкретной политикой
powershell -ExecutionPolicy Bypass -File script.ps1
Проблемы совместимости версий
При работе со скриптами для разных версий PowerShell:
# Проверка минимально требуемой версии
$minimumVersion = "5.1"
if ($PSVersionTable.PSVersion -lt $minimumVersion) {
Write-Error "Версия PowerShell $($PSVersionTable.PSVersion) не поддерживается. Минимально требуемая: $minimumVersion"
exit 1
}
# Использование команд, специфичных для версии
if ($PSVersionTable.PSVersion -ge "7.0.0") {
# Код, специфичный для PowerShell 7+
$result = 1..1000 | ForEach-Object -Parallel { $_ * 2 } -ThrottleLimit 10
} else {
# Код для устаревшего PowerShell
$result = 1..1000 | ForEach-Object { $_ * 2 }
}
Заключение
Определение версии PowerShell и статуса установки с помощью описанных выше методов является простым процессом. Для быстрой проверки используйте $PSVersionTable в PowerShell или powershell --version из командной строки. Ключевые выводы:
- Используйте
$PSVersionTableдля получения comprehensive информации о версии в PowerShell - Проверяйте
$PSVersionTable.PSEditionдля различия между Windows PowerShell и PowerShell Core - Используйте методы, специфичные для платформы, для систем macOS и Linux
- PowerShell 7+ предлагает кроссплатформенную совместимость при сохранении обратной совместимости
- Автоматизированные скрипты могут помочь в обнаружении версии на нескольких системах
Для системных администраторов и разработчиков понимание, какая версия PowerShell установлена, имеет решающее значение для совместимости скриптов и устранения неполадок. Предоставленные скрипты и методы работают на разных платформах и могут быть интегрированы в более крупные автоматизированные рабочие процессы.