пятница, 28 февраля 2025 г.

pwsh.exe, powershell.exe, 7.5, Giga, Setup, SymbolicLink

pwsh.exe, powershell.exe, 7.5

Setup:

https://learn.microsoft.com/ru-ru/powershell/scripting/install/installing-powershell-on-windows?view=powershell-7.5

Giga

https://giga.chat/link/gcsdSwCmXf

PowerShell 7.x действительно поставляется с исполняемым файлом pwsh.exe, а не powershell.exe.

Это сделано намеренно, чтобы избежать конфликтов между классической версией

PowerShell (версия 5.x) и новой версией (PowerShell 7.x).

Они имеют разные исполняемые файлы и могут существовать одновременно на одной машине.

Почему PowerShell 7.x называется pwsh.exe

  • PowerShell 5.x: Исполняемый файл называется powershell.exe и является частью Windows.
  • PowerShell 7.x: Исполняемый файл называется pwsh.exe (сокращение от PowerShell),
  • так как это отдельная программа, которая устанавливается независимо от Windows.

Как разрешить конфликты и сделать так, чтобы ваши скрипты работали?

Есть несколько способов решения проблемы с тем, что скрипты рассчитаны на powershell.exe,

а не на pwsh.exe.

Вариант 1: Создать символьную ссылку на powershell.exe

Один из простых вариантов — создать символическую ссылку на pwsh.exe с именем powershell.exe.

Таким образом,

любые вызовы powershell.exe будут перенаправляться на pwsh.exe.

  1. Откройте PowerShell от имени администратора.
  2. Переходите в каталог установки PowerShell 7.x. Обычно это C:\Program Files\PowerShell\7.
  3. Внутри каталога создайте символическую ссылку:

New-Item -ItemType SymbolicLink -Path ".\powershell.exe" -Target ".\pwsh.exe"
---------------

Вы успешно создали символическую ссылку на pwsh.exe с именем powershell.exe.

Теперь, когда вы запускаете powershell.exe, фактически запускается pwsh.exe, что позволяет

вашим скриптам и командам работать как ожидалось.

Что произошло:

  1. Создание символической ссылки: Вы использовали команду New-Item для создания
  2. символической ссылки с именем powershell.exe,
  3. которая указывает на файл pwsh.exe.
  4. Тестирование: Когда вы запустили powershell.exe, он успешно открыл PowerShell 7.5.0,
  5. что подтверждает правильность настройки.

Следующие шаги:

  1. Добавление в PATH: Убедитесь, что каталог, содержащий новый powershell.exe,
  2. добавлен в переменную окружения PATH.
  3. Это позволит вызывать powershell.exe из любого места в системе.
    • Откройте свойства системы (Win + PauseДополнительные параметры
    • системы → вкладка Дополнительно → кнопка Переменные среды...).
    • В разделе «Системные переменные» найдите переменную Path и нажмите «Изменить».
    • Добавьте путь к каталогу, содержащему powershell.exe, например, D:\Tools\Pws750\7.
  4. Проверка в скриптах: Протестируйте ваши скрипты, чтобы убедиться, что они теперь
  5. корректно выполняются с использованием нового powershell.exe.

Преимущества данного подхода:

  • Скрипты продолжают работать без изменений.
  • Символическая ссылка обеспечивает гибкость и обратную совместимость.
  • Нет необходимости изменять существующие скрипты или конфигурационные файлы.
 ------------------------------------------------------------------------------
25.03.04
https://giga.chat/link/gcsycBtoAw

напомни команду которая делает, что при вызове pwsh.exe выполняется команда powershell.exe

Ответ

Команда, которую ты ищешь, вероятно, связана с созданием алиаса или

ярлыка для вызова powershell.exe через pwsh.exe. В PowerShell это можно сделать

с помощью команды Set-Alias.

Создание алиаса в PowerShell

Чтобы создать алиас, который будет вызывать powershell.exe каждый раз,

когда ты вводишь pwsh.exe, можно воспользоваться следующей командой:

Set-Alias -Name pwsh -Value powershell

Объяснение:

  • Set-Alias: Команда для создания нового псевдонима (алиаса) в PowerShell.
  • -Name pwsh: Имя алиаса, которое ты будешь вводить в командной строке.
  • -Value powershell: Команда или скрипт, который будет выполнен при вызове алиаса.

Пример использования:

После выполнения команды Set-Alias -Name pwsh -Value powershell,

когда ты введёшь pwsh в консоли PowerShell, фактически будет вызван powershell.exe.

Постоянный алиас

Если ты хочешь, чтобы этот алиас сохранялся между сессиями PowerShell,

можно добавить эту команду в твой профиль PowerShell. Для этого открой файл профиля:

notepad $PROFILE

И добавь туда следующую строку:

Set-Alias -Name pwsh -Value powershell

Теперь при каждом запуске PowerShell этот алиас будет активирован автоматически.

Альтернативный способ: Ярлык

Другой вариант — создание ярлыка для powershell.exe с именем pwsh.exe. Для этого:

  1. Найди расположение powershell.exe на твоём компьютере
  2. (обычно это C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe).
  3. Щёлкни правой кнопкой мыши на powershell.exe и выбери «Создать ярлык».
  4. Переименуй созданный ярлык в pwsh.exe.
  5. Перемести этот ярлык в директорию, которая находится в переменной PATH (например, в C:\Windows\System32).

Теперь, когда ты введёшь pwsh в командной строке, будет вызван powershell.exe.

Заключение

Используя любой из этих методов, ты сможешь вызывать powershell.exe через команду pwsh.

Выбор метода зависит от твоих предпочтений и потребностей.

Просто у меня в каталоге powershell есть pwsh.exe Application и powershell.exe .symlink

  • это означает, что мы уже сделали команду Set-Alias -Name pwsh -Value powershell ?
Ответ

Наличие файлов pwsh.exe и powershell.exe.symlink в каталоге PowerShell говорит о том,

что эти два файла связаны друг с другом. Однако это не обязательно означает,

что была выполнена команда Set-Alias в PowerShell.

Что такое symlink (символическая ссылка)?

Символическая ссылка (symlink) — это специальный файл, который указывает

на другой файл или каталог. Когда ты обращаешься к символической ссылке,

система перенаправляет запрос на тот файл или каталог, на который ссылается symlink.

Powershell.exe и Pwsh.exe

  • Powershell.exe: Это оригинальный исполняемый файл для классической версии PowerShell.
  • Pwsh.exe: Это исполняемый файл для новой версии PowerShell Core (начиная с версии 6.x),
  • которая написана на платформе .NET Core и предназначена для кросс-платформенной поддержки.

Символическая ссылка

Если у тебя в каталоге PowerShell есть файл powershell.exe.symlink, который указывает на pwsh.exe,

это означает, что при запуске powershell.exe фактически будет запущен pwsh.exe.

Это сделано для совместимости, чтобы пользователи могли продолжать использовать

привычные команды powershell.exe, даже если установлена новая версия PowerShell Core.

Команды Set-Alias

Команда Set-Alias создаёт псевдоним (алиас) в контексте PowerShell,

позволяя одной команде заменяться другой. Однако создание символической ссылки

на уровне файловой системы отличается от создания алиасов в PowerShell.

Алиасы действуют только в рамках сессии PowerShell,

тогда как символические ссылки работают на уровне операционной системы.

Итог

Если у тебя в каталоге PowerShell есть powershell.exe.symlink, указывающий на pwsh.exe,

это означает, что при запуске powershell.exe будет выполняться pwsh.exe.

Это связано с наличием символической ссылки, а не с командой Set-Alias.

у меня в одном и том же каталоге есть

  • powershell.exe .symlink 0 kb
  • pwsh.exe Application 279 kb. Я помню, что делал какую-то команду, чтобы при вызове powershell.exe выполнялся pwsh.exe
Ответ

Судя по описанной ситуации, ты, скорее всего, создал символическую ссылку (symlink) от powershell.exe к pwsh.exe.

Символическая ссылка — это файл, который указывает на другой файл,

и при обращении к нему происходит перенаправление на целевой файл.

Возможные сценарии

  1. Создание символической ссылки:
  2. Ты мог выполнить команду для создания символической ссылки от powershell.exe к pwsh.exe.
  3. В Windows это делается с помощью команды mklink в командной строке:
mklink powershell.exe pwsh.exe
Или, если ты использовал PowerShell:
New-Item -ItemType SymbolicLink -Path powershell.exe -Target pwsh.exe
Использование junction point: Еще один возможный сценарий
 — это создание точки соединения (junction point) с помощью команды junction (инструмент из пакета Sysinternals):
junction powershell.exe pwsh.exe
  1. Переопределение в реестре: Возможно, ты внес изменения в реестр Windows,
  2. чтобы при вызове powershell.exe запускался pwsh.exe.
  3. Это можно сделать, добавив соответствующие ключи в ветку реестра, отвечающую за ассоциации файлов.

Проверка символической ссылки

Чтобы убедиться, что действительно создана символическая ссылка, можно проверить это в командной строке:

  1. Открой командную строку и перейди в каталог, где находятся оба файла.
  2. Выполни команду:
dir /AL
Если в результате ты увидишь запись вида:
powershell.exe [SYMLINK] -> pwsh.exe
  1. Значит, символическая ссылка действительно создана.

Заключение

Судя по всему, ты создал символическую ссылку от powershell.exe к pwsh.exe,

чтобы при вызове первого выполнялся второй.

Это наиболее вероятный сценарий,

учитывая наличие обоих файлов в одном каталоге и нулевой размер файла powershell.exe.symlink,

что характерно для символических ссылок.

\Tools\Pws750\7>dir /AL Volume in drive D is Work Volume Serial Number is E8CD-E387

Directory of D:\Tools\Pws750\7

2025-03-01 00:45 <SYMLINK> powershell.exe [.\pwsh.exe] 1 File(s) 0 bytes 0 Dir(s) 559,636,189,184 bytes free

Ответ

Результаты команды dir /AL показывают,

что у тебя действительно создана символическая ссылка от powershell.exe к pwsh.exe.

Это означает, что при вызове powershell.exe будет выполняться pwsh.exe.

Подробности вывода:

  • Volume in drive D is Work: Показывает,
  • что операция выполняется на диске D:, который имеет метку "Work".
  • Directory of D:\Tools\Pws750\7: Каталог, в котором находятся файлы.
  • 2025-03-01 00:45: Дата и время последней модификации.
  • <SYMLINK>: Тип файла — символическая ссылка.
  • powershell.exe [.\pwsh.exe]: Имя символической ссылки (powershell.exe) и целевой файл (pwsh.exe).
  • 1 File(s): Количество файлов в каталоге.
  • 0 bytes: Размер символической ссылки (символические ссылки занимают 0 байт).
  • 0 Dir(s): Количество подкаталогов.
  • 559,636,189,184 bytes free: Свободное пространство на диске.

Что это значит?

Когда ты вызываешь powershell.exe, система фактически обращается к pwsh.exe,

потому что powershell.exe является символической ссылкой на pwsh.exe.

Таким образом, ты добился желаемого поведения: при вызове powershell.exe выполняется pwsh.exe.

Заключение

Ты правильно создал символическую ссылку, и теперь при вызове powershell.exe

будет запускаться pwsh.exe. Это удобный способ обеспечить совместимость

старых скриптов и команд с новыми версиями PowerShell.