|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] запуск скрипта в powershell 7 и вывод информацию в консоли на русском |
|
PowerShell - [решено] запуск скрипта в powershell 7 и вывод информацию в консоли на русском
|
Новый участник Сообщения: 22 |
Добрый день, народ!
У меня есть задача: на постоянное основе в файл JSON добавлять изменения. Сделал эту задачу через скрипт на поше через конвертацию. Однако, конвертация обратно из объекта в джейсон не корректно отрабатывает, то есть при преобразовании сдвигает все ключи/значенния вправо. Решил данную задачу можно через Powershell версии 7. Но столкнулся с проблемой, что при запуске скрипта используется дефолтный пош на машине. Подскажите, пожалуйста, как мне добавить в скрипт информацию, чтобы он запускал мой скрипт через pwsh? Весь инет перерыл, нигде нет такой информации(( В скрипт добавил тихую установку поша 7й версии и по разному пробовал добавить запуск pwsh с дальнейшими действиями моего скрипта, но увы... всё без результатно он либо продолжает использовать 5.1 версию, либо просто останавливает скрипт на моменте запуска 7й версии ![]() И ещё, дополнительно, тоже не могу понять: когда я конвертирую ps1 в exe у меня при запуске русские буквы просто не отображаются... Тобишь есть вот обычный вывод в консоль: Но в консоль выводится только ...json... то есть русских букв в принципе нет. Пробовал и через такую команду: Однако, это не помогает, как я понял это работает только перед запуском скрипта в той же консоли, где ты запускаешь и в последующем запуске это снова нужно вводить. Помогите, пожалуйста. Спасибо! |
|
Отправлено: 12:28, 17-10-2022 |
Новый участник Сообщения: 22
|
Профиль | Отправить PM | Цитировать Так... вроде разобрался, только не понимаю на сколько это будет правильно и адекватно с точки зрения самого кода..)
В общем визуально получилось вот так: 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 } else { if ($PSVersionTable.PSEdition -ne 'Core') { pwsh -file $MyInvocation.MyCommand.Source; return Write-Host -Object "ERROR RUN PWSH.EXE" } else { 'Пошёл мой код' } } не знаю, есть ли смысл делать elseif как дополнительный параметр, если вдруг у него не получилось запустить pwsh? да и вообще нужна ли вторая проверка и запуск самого поша 7 ещё раз, тоже не знаю... работать то (вроде) работает, а вот сильно ли это костыльно и херово (мол пока что работает и ладно) вот это не знааю.. хотелось бы, конечно, сделать грамотно и чотко) p.s. хотя я смотрю косяк возникает когда я из этого .ps1 формируют .exe... первое что он выдаёт это ошибку: The command cannot be run because the File parameter requires a fine path. Supply a path for the File parameter and then try the command again. Это 101% не в моё коде, ибо если мой код также преобразовать в .exe то там всё отрабатывает как нужно и красиво, а вот если добавляешь эту часть с установкой.. проверкой pwsh то такая фигня(( Методом проб и ошибок, ругается он на вот эту команду: pwsh.exe -file $MyInvocation.MyCommand.Source и ничего дальше не запускает.. точно также (если выделить именно этот объект и запустить его) тогда не понимаю, почему он в .ps1 полноценно это всё отрабатывает и никаких ошибок не вызывает... |
Последний раз редактировалось Njem, 18-10-2022 в 13:41. Отправлено: 13:17, 18-10-2022 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 1758
|
# Проверка на наличие pwsh.exe в $env:Path, если нет скрипт завершается if (-not (Get-Command pwsh.exe*)) { return } # Проверка редакции PowerShell, в которой выполняется скрипт. # Если скрипт выполняет powershell.exe, а не pwsh.exe, скрипт перезапускается в pwsh.exe # Этот экземпляр завершается if ($PSVersionTable.PSEdition -ne 'Core') { pwsh -file $MyInvocation.MyCommand.Source return } # Здесь весь остальной код |
Отправлено: 16:29, 18-10-2022 | #12 |
Старожил Сообщения: 250
|
Профиль | Отправить PM | Цитировать ... и все это ради индентации json на два пробела..
|
Отправлено: 03:46, 19-10-2022 | #13 |
Новый участник Сообщения: 22
|
Профиль | Отправить PM | Цитировать Цитата Serguei Kouzmine:
Даже если просто два пробела ему указать, всё равно улетает всё также, как и улетало, только при 4х пробелов)) Специально для тебя, чтоб понимал приложил скриншот как выглядило до и после конвертации джейсона) |
|
Отправлено: 12:56, 21-10-2022 | #14 |
Старожил Сообщения: 250
|
Профиль | Отправить PM | Цитировать вот пример "pretty-print"
статичесими фактори методами классов Newtonsoft.Json $y = [Newtonsoft.Json.JsonConvert]::DeserializeObject($r) $n = [Newtonsoft.Json.JsonConvert]::SerializeObject($y, [Newtonsoft.Json.Formatting]::Indented) write-output $n как конфиурировать indent то есть если надо чтобы выглядело как написано в https://www.newtonsoft.com/json/help...zeObject_3.htm https://www.newtonsoft.com/json/help...formatting.htm https://www.newtonsoft.com/json/help...ndentation.htm |
Последний раз редактировалось Serguei Kouzmine, 22-10-2022 в 19:49. Причина: добавление примера Отправлено: 18:43, 22-10-2022 | #15 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|