Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] запуск скрипта в powershell 7 и вывод информацию в консоли на русском

Ответить
Настройки темы
PowerShell - [решено] запуск скрипта в powershell 7 и вывод информацию в консоли на русском

Новый участник


Сообщения: 22
Благодарности: 0

Профиль | Отправить PM | Цитировать


Добрый день, народ!

У меня есть задача: на постоянное основе в файл JSON добавлять изменения. Сделал эту задачу через скрипт на поше через конвертацию. Однако, конвертация обратно из объекта в джейсон не корректно отрабатывает, то есть при преобразовании сдвигает все ключи/значенния вправо.
Решил данную задачу можно через Powershell версии 7. Но столкнулся с проблемой, что при запуске скрипта используется дефолтный пош на машине. Подскажите, пожалуйста, как мне добавить в скрипт информацию, чтобы он запускал мой скрипт через pwsh? Весь инет перерыл, нигде нет такой информации((
В скрипт добавил тихую установку поша 7й версии и по разному пробовал добавить запуск pwsh с дальнейшими действиями моего скрипта, но увы... всё без результатно он либо продолжает использовать 5.1 версию, либо просто останавливает скрипт на моменте запуска 7й версии

И ещё, дополнительно, тоже не могу понять: когда я конвертирую ps1 в exe у меня при запуске русские буквы просто не отображаются...
Тобишь есть вот обычный вывод в консоль:
Код: Выделить весь код
Write-Host -ForegroundColor Green -Object "Процесс обновления строки Json завершен"
Но в консоль выводится только ...json... то есть русских букв в принципе нет.
Пробовал и через такую команду:
Код: Выделить весь код
[Console]::OutputEncoding = [System.Text.Encoding]::GetEncoding("cp866")
Однако, это не помогает, как я понял это работает только перед запуском скрипта в той же консоли, где ты запускаешь и в последующем запуске это снова нужно вводить.

Помогите, пожалуйста.

Спасибо!

Отправлено: 12:28, 17-10-2022

 

Ветеран


Сообщения: 1758
Благодарности: 966

Профиль | Цитировать


Цитата Njem:
это работает только перед запуском скрипта в той же консоли »
Прямо из скрипта не работает? На счет приоритета запуска pwsh вместо powershell на ум приходит только смена позиций в переменной $env:Path. Или выдумывать проверку с перезапуском:

Код: Выделить весь код
if ($PSVersionTable.PSEdition -ne 'Core') { pwsh -file $MyInvocation.MyCommand.Source; return }

# code

Последний раз редактировалось Foreigner, 17-10-2022 в 14:29.

Это сообщение посчитали полезным следующие участники:

Отправлено: 14:19, 17-10-2022 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6626
Благодарности: 1528

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
pwsh -file "c:\путь\к\скрипту\скрипт.ps1"

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Отправлено: 14:35, 17-10-2022 | #3


Новый участник


Сообщения: 22
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата DJ Mogarych:
pwsh -file "c:\путь\к\скрипту\скрипт.ps1" »
хм.. так тоже думал, но это же получается отдельный файл с этой командой запуска, которая обращается к моему скрипту)
возможно, это вариант, но не думаю что хороший способ просто эти два файла потом перекидывать, если потребуется и так далее, думаю всё запихнуть в один и чтоб один файл запускать уже где угодно
и опять же, файлы то будут не на одной машине, а могут перемещаться, тобишь каждый раз новый путь прописывать тоже не камельфо

Цитата Foreigner:
Прямо из скрипта не работает? »
Если прям из по VSC запустить всё нормально, если из под поша тоже всё норм, а вот когда преобразовываешь в .exe то теряется кодировка и он тупо русский не видит(
я так понял что-то должно быть внутри в коде, чтобы он понимал русский язык..

Последний раз редактировалось Njem, 17-10-2022 в 15:26.


Отправлено: 15:18, 17-10-2022 | #4


Новый участник


Сообщения: 22
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата Foreigner:
Или выдумывать проверку с перезапуском:
Код: »
слушай-ка, а работает, ого
круто! идёт запуск с pwsh, пасибо!)
осталось только понять как сделать отображаение русских букв, когда выводит консоль

Отправлено: 15:44, 17-10-2022 | #5


Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6626
Благодарности: 1528

Профиль | Отправить PM | Цитировать


Цитата Njem:
каждый раз новый путь прописывать »
Не надо ничего прописывать, pwsh работает без указания пути, если он установлен в систему.
Можете при установке PS7 указать, чтобы он встраивался в контекстное меню.
Можно запускать из ярлыка.

Вариантов масса.

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Отправлено: 15:49, 17-10-2022 | #6


Новый участник


Сообщения: 22
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата DJ Mogarych:
Не надо ничего прописывать, pwsh работает без указания пути, если он установлен в систему.
Можете при установке PS7 указать, чтобы он встраивался в контекстное меню.
Можно запускать из ярлыка. »
хм... звучит интересно
я ж имел ввиду что вот в коде:
Код: Выделить весь код
pwsh -file "c:\путь\к\скрипту\скрипт.ps1"
Нужно каждый раз прописывать путь к скрипту, который нужно запустить в pwsh

А нет случаем идеи, как бы заграть в скрипт функцию проверки pwsh в системе?
Тип если pwsh есть, то юзать...{код}
если нет то он устанавливает pwsh и идёт по новой к первому пункту
Я установку pwsh сделал через команды:
Код: Выделить весь код
Install-PackageProvider -Name chocolatey -Force
Код: Выделить весь код
Set-PackageSource -Name Chocolatey -Trusted
Код: Выделить весь код
Install-PackageProvider -Name ChocolateyGet
Код: Выделить весь код
Install-Package -Name pwsh -Source Chocolatey -Provider ChocolateyGet -Force -Verbose
мб ваще есть какой-то проще вариант с тихой установкой

Просто проверка через
Код: Выделить весь код
Find-Package -Name pwsh -Force
не срабатывает... валится ошибка: No match was found for the specified search criteria and package name 'pwsh'. Try Get-PackageSource to see all available registered package sources.
Но вот если руками попробовать тот же код юзануть, то он найдёт спокойно установленный pwsh у меня

Отправлено: 16:19, 17-10-2022 | #7


Ветеран


Сообщения: 1758
Благодарности: 966

Профиль | Цитировать


Цитата Njem:
А нет случаем идеи, как бы заграть в скрипт функцию проверки pwsh в системе? »
Код: Выделить весь код
if (Get-Command pwsh) { 'что-то делаем' } else { return }
Или от обратного

Код: Выделить весь код
if (-not (Get-Command pwsh)) { return }
'что-то делаем'
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:04, 17-10-2022 | #8


Ветеран


Сообщения: 1758
Благодарности: 966

Профиль | Цитировать


Чтобы не убивать ошибки и варианты других программ лучше заменить "pwsh" на "pwsh.exe*":

Код: Выделить весь код
if (-not (Get-Command pwsh.exe*)) { return }
или добавить -ea 4 (-ErrorAction 'Ignore')

Последний раз редактировалось Foreigner, 17-10-2022 в 21:40.


Отправлено: 17:20, 17-10-2022 | #9


Новый участник


Сообщения: 22
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата Foreigner:
Чтобы не убивать ошибки и варианты других программ лучше заменить "pwsh" на "pwsh.exe*":
Код:
if (-not (Get-Command pwsh.exe*)) { return }
или добавить -ea 4 (-ErrorAction 'Ignore') »
Так... вроде понял, но что-то видимо не до конца понял)
Получается, идёт проверка на наличие pwsh.exe:
Код: Выделить весь код
if (-not (Get-Command pwsh.exe*)) {
     return 
    }
Если проверка с false, то выполняются команды сделующие:
Код: Выделить весь код
Install-PackageProvider -Name chocolatey -Force
Set-PackageSource -Name Chocolatey -Trusted
Install-PackageProvider -Name ChocolateyGet
Install-Package -Name pwsh -Source Chocolatey -Provider ChocolateyGet -Force -Verbose
И уже дальше идёт мой код, верно?
Тобишь и получается как-то так в самом начале:
Код: Выделить весь код
if (-not (Get-Command pwsh.exe*)) {
     return 
    }
    Install-PackageProvider -Name chocolatey -Force
    Set-PackageSource -Name Chocolatey -Trusted
    Install-PackageProvider -Name ChocolateyGet
    Install-Package -Name pwsh -Source Chocolatey -Provider ChocolateyGet -Force -Verbose
    if ($PSVersionTable.PSEdition -ne 'Core') {
        pwsh -file $MyInvocation.MyCommand.Source; return 
       }
    {'мой код'}
Или что-то не так?
Просто по факту оно каждый раз запускает инсталятор pwsh, хотя когда он есть, надо скрип...

Отправлено: 12:55, 18-10-2022 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] запуск скрипта в powershell 7 и вывод информацию в консоли на русском

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
PowerShell - Вывод данных в cmd из PowerShell без запуска консоли Nolly Скриптовые языки администрирования Windows 3 03-05-2018 20:24
PowerShell - powershell запуск скрипта на удаленном компьютере с авторизацией на сетевом ресурсе densan Скриптовые языки администрирования Windows 4 15-02-2018 14:07
CMD/BAT - [решено] Вывод имен файлов на экран консоли Strinteijer Скриптовые языки администрирования Windows 5 04-07-2016 19:45
CMD/BAT - Скрипт сравнения дат. Непонятный вывод на консоли. FessAectan Скриптовые языки администрирования Windows 3 11-11-2013 12:47
PowerShell - [решено] Автоматический запуск скрипта PowerShell по времени. KAB Скриптовые языки администрирования Windows 7 06-03-2012 10:20




 
Переход