Что случилось с этим в PowerShell V3 CTP2 ISE? - PullRequest
1 голос
/ 30 декабря 2011

В PowerShell V2 следующее возвращает кодировку текущего редактора

$a=$psise.CurrentPowerShellTab.Files[0]
$a.gettype().getfield("encoding","nonpublic,instance").getvalue($a) 

, а с помощью

$a=$psise.CurrentPowerShellTab.Files[0]
$a.gettype().getfield("encoding","nonpublic,instance").setvalue($a,[text.encoding]::ascii) 

можно установить кодировку ASCII.ср этот пост

Попытка сделать то же самое с PowerShell V3 не удалась.Очевидно, getfield () не возвращает объекта.Есть идеи, чтобы это исправить?

Ответы [ 2 ]

3 голосов
/ 05 января 2012

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

Тем не менее, попробуйте это:

$psise.CurrentPowerShellTab.Files | % {
    $_.gettype().getfield("doc","nonpublic,instance").getvalue($_).Encoding = [text.encoding]::ascii
}

Или, процитировать весь сценарий:

# watch for changes to the Files collection of the current Tab
register-objectevent $psise.CurrentPowerShellTab.Files collectionchanged -action {
    # iterate ISEFile objects
    $event.sender | % {
         # set encoding on private ITextDocument field to ASCII
         $_.gettype().getfield("doc","nonpublic,instance").getvalue($_).Encoding = [text.encoding]::ascii
    }
}
1 голос
/ 30 декабря 2011

Я никогда не пробовал это раньше (в v2), но похоже, что это работает в CTP2:

PS> $a = $psise.CurrentPowerShellTab.Files[0]
PS> $a.Encoding

BodyName          : utf-8
EncodingName      : Unicode (UTF-8)
HeaderName        : utf-8
WebName           : utf-8
WindowsCodePage   : 1200
IsBrowserDisplay  : True
IsBrowserSave     : True
IsMailNewsDisplay : True
IsMailNewsSave    : True
IsSingleByte      : False
EncoderFallback   : System.Text.EncoderReplacementFallback
DecoderFallback   : System.Text.DecoderReplacementFallback
IsReadOnly        : True
CodePage          : 65001


PS> $a.Save([text.encoding]::ascii)
PS> $a.Encoding

IsSingleByte      : True
BodyName          : us-ascii
EncodingName      : US-ASCII
HeaderName        : us-ascii
WebName           : us-ascii
WindowsCodePage   : 1252
IsBrowserDisplay  : False
IsBrowserSave     : False
IsMailNewsDisplay : True
IsMailNewsSave    : True
EncoderFallback   : System.Text.EncoderReplacementFallback
DecoderFallback   : System.Text.DecoderReplacementFallback
IsReadOnly        : True
CodePage          : 20127
...