none
изменеие кодировки в удалённой сессии powershell RRS feed

  • Вопрос

  • Здравствуйте, у меня такая проблема: хочу получить информацию о ключах MS Office, установленных на компьютерах сети, для чего хотел воспользоваться скриптом

    invoke-command -ComputerName PC01,PC02,PC03 -Scriptblock {cscript "C:\Program Files (x86)\Microsoft Office\Office16\OSPP.VBS" /dstatus}

    Мне возвращается следующее:
    ‘ҐаўҐа б業 аЁҐў Windows (Microsoft R) ўҐабЁп 5.812
    Copyright (C) Љ®аЇ®а жЁп Њ ©Єа®б®дв 1996-2006, ўбҐ Їа ў  § йЁйҐ­л.

    проверяю кодировку на удалённом ПК

    invoke-command -ComputerName PC01 -Scriptblock {ipconfig|out-null;[Console]::outputEncoding}

    PSComputerName    : PC01
    RunspaceId        : 3c9f4870-2eb7-4384-8ffd-8ef87d032d9d
    IsSingleByte      : True
    BodyName          : koi8-r
    EncodingName      : Кириллица (Windows)
    HeaderName        : windows-1251
    WebName           : windows-1251
    WindowsCodePage   : 1251
    IsBrowserDisplay  : True
    IsBrowserSave     : True
    IsMailNewsDisplay : True
    IsMailNewsSave    : True
    EncoderFallback   : System.Text.InternalEncoderBestFitFallback
    DecoderFallback   : System.Text.InternalDecoderBestFitFallback
    IsReadOnly        : True
    CodePage          : 1251

    хотел поменять 1251 на 866 таким же образом 

    invoke-command -ComputerName PC01 -Scriptblock {ipconfig|out-null;[Console]::outputEncoding =[System.Text.Encoding]::GetEncoding('cp866') }

    возвращается ошибка "Исключение при задании "outputEncoding" : "Неверный дескриптор."  Хотя

    ipconfig|out-null

    перед сменой кодировки должна была эту проблему решить.

    Подскажите, есть ещё какие-нибудь варианты поменять кодировку в удалённой сессии?

    16 апреля 2021 г. 6:32

Ответы

  • Здравствуйте. В интернетах нашел такое решение:

        invoke-command -ComputerName MSK-DC-01 -Scriptblock { 
        
           function ConvertTo-Encoding ([string]$From, [string]$To){
            Begin{
                $encFrom = [System.Text.Encoding]::GetEncoding($from)
                $encTo = [System.Text.Encoding]::GetEncoding($to)
            }
            Process{
                $bytes = $encTo.GetBytes($_)
                $bytes = [System.Text.Encoding]::Convert($encFrom, $encTo, $bytes)
                $encTo.GetString($bytes)
            }
        }
        
        ipconfig | ConvertTo-Encoding "cp866" "windows-1251" }

    Еще работает решение от Kazun'a:

    Неправильная кодировка в PowerShell при удалённом подключение

    Только там всё в формате format-table выводит, как в format-list сделать не знаю.

    16 апреля 2021 г. 7:37