Windows

Обёртки над текстовыми командами в PowerShell

2

Хотел поделиться опытом создания простой объектно-ориентированной обёртки над обыкновенной консольной утилитой для облегчения работы с ней. Для примера была выбрана pnputil для работы с хранилищем дистрибутивов драйверов в Windows. (далее…)

Работа с японским IME в Windows

0

Горячие клавиши

В справке я полного списка не нашёл, да и в окне конфигурации размером со спичечный коробок смотреть неудобно. Поэтому делаю полный список всех горячих клавиш как он есть, без изменений (делался на основе конфигурации IME из Windows 7).

Также, настоятельно рекомендую попробовать Google Japanese IME (в Windows по-умолчанию будут использоваться всё те же горячие клавиши стандартного IME). Плюс — динамическая подсказка прямо во время ввода. Плюс — чуть меньше багов со шрифтами при вводе в Word. Но есть функциональные ограничения: только ввод с клавиатуры (нет рукописного ввода и поиска по ключам и количеству чёрт).

Таблица получилась довольно широкой, поэтому рекомендуется использовать максимальную ширину просмотра (переключается всплывающей кнопочкой в правом верхнем углу страницы).

Итак, список:

Key No input / Converted strings Only Input strings Converted Showing Candidate List Changing POS boundary Char Input into Converted POS
SPACE SpaceWidth ConvAll Extended candidate DetThenNext ConvPhra ConvAll
Ctrl+SPACE - HalfSpace HalfSpace HalfSpace HalfSpace HalfSpace
Shift+SPACE AltSpaceWidth ConvAll PrevCand PrevCand ConvPhra ConvAll
Ctrl+Shift+SPACE FullSpace FullSpace FullSpace FullSpace FullSpace FullSpace
BackSpace - DelBackChar DelBackChar CloseCandidate - DelBackChar
Ctrl+BackSpace UndoDet DelBackChar RevPhra RevPhra - DelBackChar
Shift+BackSpace - DelBackChar RevPhra RevPhra - DelBackChar
Enter - DetAll DetAll Sel+Det DetAll DetAll
Ctrl+Enter - DetAll DetAll DetAll DetAll DetAll
Shift+Enter - - - - - -
Esc - ClearAll RevPhra CloseCandidate RevPhra RevAll
Shift+Esc - ClearAll RevAll RevAll RevAll RevAll
半角/全角 IME ON/OFF - - - - -
英数 Kana/Alpha Kana/Alpha Kana/Alpha Kana/Alpha Kana/Alpha Kana/Alpha
無変換 ToggleKana ToggleKana ToggleKana ToggleKana ToggleKana ToggleKana
Shift+無変換 ToggleAlphanumeric Alphanumeric Alphanumeric Alphanumeric Alphanumeric Alphanumeric
変換 Reconv ConvAll Extended candidate DetThenNext ConvPhra ConvAll
Ctrl+変換 Menu Menu Menu ReadCand Menu Menu
Shift+変換 - - PrevCand PrevCand - -
カタカナ Katakana key Katakana key Katakana key Katakana key Katakana key Katakana key
Shift+カタカナ Katakana key Katakana key Katakana key Katakana key Katakana key Katakana key
ひらがな Hiragana key Hiragana key Hiragana key Hiragana key Hiragana key Hiragana key
TAB - - - Change view - -
Shift+TAB - - - - - -
PageUp - - - PrevCands - -
PageDown - - - NextCands - -
End - EndOfChars EndOfPhra EndOfCand - -
Home - StartOfChars StartOfPhra StartOfCand - -
Shift+Home - - - - - -
- CharLeft PhraCharLeft PhraCharLeft PhraLeft CharLeft
Ctrl+← - StartOfChars StartOfPhra Goto1stPhra - StartOfChars
Shift+← - CharLeft ShrinkPhra ShrinkPhra ShrinkPhra CharLeft
- - - PrevCand ShrinkPhra -
Ctrl+↑ - StartOfChars PrevCand PrevCand - -
Shift+↑ - - - PrevCands - -
- CharRight PhraRight PhraRight PhraRight CharRight
Ctrl+→ - EndOfChars EndOfPhra GotoLastPhra - EndOfChars
Shift+→ - CharRight ExtendPhra ExtendPhra ExtendPhra CharRight
- - - NextCand ExtendPhra -
Ctrl+↓ - EndOfChars DetPhra DetPhra DetPhra DetPhra
Shift+↓ - Det1stChar Det1stPhra NextCands Det1stPhra Det1stPhra
Delete - DelChar DelChar CloseCandidate - DelChar
Ctrl+Delete - - - Delete Word - -
Ctrl+A - StartOfChars StartOfPhra Goto1stPhra - StartOfChars
Ctrl+D - CharRight PhraRight PhraRight PhraRight CharRight
Ctrl+E - - - PrevCand ShrinkPhra -
Ctrl+F - EndOfChars EndOfPhra GotoLastPhra - EndOfChars
Ctrl+G - DelChar DelChar CloseCandidate - DelChar
Ctrl+H - DelBackChar DelBackChar CloseCandidate - DelBackChar
Ctrl+I - Katakana Katakana Katakana Katakana Katakana
Ctrl+K - CharLeft ShrinkPhra ShrinkPhra ShrinkPhra CharLeft
Ctrl+L - CharRight ExtendPhra ExtendPhra ExtendPhra CharRight
Ctrl+M - DetAll DetAll Sel+Det DetAll DetAll
Ctrl+N - EndOfChars DetPhra DetPhra DetPhra DetPhra
Ctrl+O - HalfWidth HalfWidth HalfWidth HalfWidth HalfWidth
Ctrl+P - FullAlphanumeric FullAlphanumeric FullAlphanumeric FullAlphanumeric FullAlphanumeric
Ctrl+S - CharLeft PhraCharLeft PhraCharLeft PhraLeft CharLeft
Ctrl+T - HalfAlphanumeric HalfAlphanumeric HalfAlphanumeric HalfAlphanumeric HalfAlphanumeric
Ctrl+U - Hiragana Hiragana Hiragana Hiragana Hiragana
Ctrl+X - - - NextCand ExtendPhra -
Ctrl+Y - RadLookup RadLookup RadLookup RadLookup RadLookup
Ctrl+Z - ClearAll RevPhra RevPhra RevPhra RevAll
AppsKeyApplication Key - - - CandidateMenu - -
F2 - - CharacterEdit CharacterEdit CharacterEdit -
F5 - RadLookup RadLookup RadLookup RadLookup RadLookup
F6 - Hiragana Hiragana Hiragana Hiragana Hiragana
F7 - Katakana Katakana Katakana Katakana Katakana
F8 - HalfWidth HalfWidth HalfWidth HalfWidth HalfWidth
F9 - FullAlphanumeric FullAlphanumeric FullAlphanumeric FullAlphanumeric FullAlphanumeric
F10 - HalfAlphanumeric HalfAlphanumeric HalfAlphanumeric HalfAlphanumeric HalfAlphanumeric
Ctrl+F10 Menu - - - - -
Shift+F10 - - - Candidate Menu - -
F13 Reconv - - ReadCand - -
ローマ字 Input Method Input Method Input Method Input Method Input Method Input Method

Если у вас всего лишь 101 кнопка

Это значит, что у вас нет таких замечательных штук как 半角/全角, 英数 (CAPS LOCK), 無変換, カタカナ/ひらがな, ローマ字 или F13. К счастью, хоть для некоторых из них есть альтернативные комбинации!

Оригилаьная кнопка Альтернатива
英数 Shift+CAPS LOCK или Alt+`
カタカナ Alt+CAPS LOCK
ひらがな Ctrl+CAPS LOCK

Особые слова

В отличие от прямого ввода слов по буквам, IME даёт возможность интерпретации вводимых слов. Поэтому многие слова в результате дают возможность вставки специальных символов! Несколько примеров:

Слово Символы Пример
ほし звёздочки ☆★※*
しかく прямоугольники ◇◆□■
さんかく треугольники ∴△▲∵▽▼
まる кружки и круглые штуки ○●◎〇①…⑳㊤㊥㊦㊧㊨゜
ばつ крестик ×
かっこ парные скобки 〔〕《》‘’“”『』「」【】<>≪≫〝〟
やじるし/ー> стрелки / (лево-право) ↑↓⇔/→⇒
おんぷ/シャープ/フラット ноты / модификаторы ♪♫♬/♯/♭
ハート/こころ сердечки ♡❤
チェック галочки ☑☒✔✗
きごう все возможные символы ↑→゜ゝ㍍㌧▽◆♂

[EDIT 2010-07-10]: Tofugu на днях написал пост о специальных словах — How To Type (Hidden) Special Characters In Japanese. Я кое-что оттуда позаимствовал, применимое к Windows/Google IME.

[EDIT 2010-07-12]: Google Japanese IME, начиная с версии 0.12, расширил список спец. символов галочками и дополнительными нотами.

Как бонус, этот фокус работает с большинством IME :)

Japanese IME on iPhone Google Japanese IME

VPN и Интернет в одном флаконе

0

Или, выражаясь умными словами, split tunneling.

Преамбула

Есть желание при подключении VPN в Windows использовать его только для доступа к внутренним ресурсам.

Проблемы

Проблема состоит в том, что по-умолчанию можно либо весь трафик перенаправлять через VPN-соединение (и тогда каждый раз нужно настраивать прокси-сервер, если такой вообще есть), либо лишится всякой разумной возможности работы с внутренними ресурсами (весь трафик будет перенаправляться через стандартный канал, который не имеет возможности попасть внутрь сети).

Возможное решение

Итак, хочется настроить split tunneling, чтобы для внутренних ресурсов трафик ходил через VPN и использовался внутренний DNS-сервер (чтобы можно было просто обращаться к внутренним ресурсам), а весь оставшийся трафик продолжал ходить через стандартный шлюз. Понятно, что всё это можно автоматизировать скриптами, но хочется, чтобы эти скрипты отрабатывали автоматически при подключении VPN-соединения и отменяли всё, что может помешать, после его разрыва.

Guide

Прежде чем продолжить, следует отдавать себе полный отчёт о возможных проблемах и рисках, которые несёт с собой подобная махинация. (Подробнее по ссылке из статьи Википедии).

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

Итак, приступим:

  1. Настраиваем параметры подключения VPN. Нужно отключить перенаправление всего трафика через это соединение при подключении:
    • Сетевые подключения → Свойства VPN → Сеть → IPv4 → Свойства → Дополнительно… → Убрать галку "Использовать основной шлюз в этой сети"

    Network Connections → VPN Connection → Properties → Networking → IPv4 → Properties → Advanced... → Uncheck "Use default gateway on remote network"

  2. Теперь хочется привязать выполнение скриптов к моменту установления подключения. Для этого воспользуемся Журналом событий Windows (это косметика, можно сразу переходить к шагу 3):
    • Пуск → Компьютер → Управление → Просмотр событий → Журналы Windows
    • В журнале Приложения найти событие о подключении VPN (код события: 20225; источник: RasClient)
    • В контекстном меню выбрать Привязать задачу к событию… (параметры см. далее):
      Start → Computer → Manage → Event Viewer → Windows Log → Application
  3. Созданные задания находятся чуть выше в консоли; нужно их отредактировать (или сразу создавать):

    • Планировщик заданий → Библиотека планировщика заданий → Задачи просмотра событий
    • Находим (или создаём вручную, если был пропущен шаг 2) наше задание, жмём Свойства:
      Task Scheduler → Task Scheduler Library → Event Viewer Tasks → <Our task> → Properties
    • Общие → Отметить “Выполнить с наивысшими правами”
      General → Check "Run with highest privileges"
    • Триггеры → При событии; журнал: Приложение; источник: RasClient; код события: 20225 (только если создаём руками)
    • Некоторые промежуточные действия, необходимые для дальнейших сценариев.
      Нужно узнать номер основного подключения, через которое осуществляется подключение к Интернету. Это можно сделать, выполнив в командной строке команду route print и посмотрев на Список интерфейсов:
      route print → Intrface List
    • Действия. Должно быть 2 штуки, оба типа “Запуск программы”:
      1. Программа или сценарий: netsh; добавить аргументы: interface ipv4 add route prefix=192.168.64.0/23 interface=17 metric=200 (здесь 192.168.64.0/23 – параметры внутренней сети; 17 – номер VPN подключения; 200 – метрика, чем меньше, тем более предпочтительна)
      2. Программа или сценарий: netsh; добавить аргументы: dnsclient add dnsservers 11 192.168.64.252 1 (здесь 11 – номер основного подключения; 192.168.64.252 – адрес DNS-сервера во внутренней сети; 1 – номер в списке DNS-серверов):

      Actions

    • Условия
      1. Отключить “Запускать только при питании от электросети” (опционально)
      2. Включить “Запускать только если подключении к следующей сети” и выбрать VPN-соединение:

      Conditions →

    • Параметры. При желании можно включить опцию “Остановить задачу, выполняемую дольше 1 минуты”:
      Settings → Check "Stop the task if it runs longer than: 1 minute"
  4. Теперь подобным образом нужно добавить выполнение скриптов, отменяющих наши манипуляции со списком DNS-серверов на основном соединении (если что-то пойдёт не так, то всё будет работать, просто время разрешения имён может возрасти):
    • Триггеры. Журнал: Система; источник: RasMan; код события: 20268
    • Действия. Команда: netsh; параметры: dnsclient delete dnsservers 11 192.168.64.252 (параметры те же, что и в соответствующей команде из п.3):
      Adding command on disconnect
  5. Проверяем работоспособность. Для этого пингуем / трэйсим какой-нибудь внутренний и внешний ресурс:
    Pinging addresses on intra- and internet

Заключение

Про IPv6 и DirectAccess мы поговорим как-нибудь в другой раз :-)

Изображая Марка Русиновича

0

Я, как и многие другие люди, предпочитаю иногда не выключать компьютер, а усыплять его или вводить в гибернацию. Сильно экономит время при включении.

И вот в субботу утром (ну, ладно, полпервого дня *^_^*) я проснулся от того, что кто-то включил компьютер. Не знаю для кого как, а для меня – это один из самых неприятных способов проснуться. Ещё сильнее я удивился, повернувшись лицом к проблеме и обнаружив, что никого рядом нет.

Хм… в проявление искусственного интеллекта я не верю, поэтому мне стало очень интересно, какого лешего мой компьютер самопроизвольно включился.

Начиная с Висты, консольная утилита powercfg.exe стала просто бесценным инструментом для диагностики большинства проблем, связанных с питанием. Итак, запускаем наш любимый PowerShell:

Windows PowerShell
Copyright (C) 2009 Microsoft Corporation. All rights reserved.

PowerTab version 0.99 Beta 2 PowerShell TabExpansion library
/\/\o\/\/ 2007 http://thePowerShellGuy.com
PowerTab Tabexpansion additions enabled : True
PS> powercfg -lastwake
Wake History Count - 1
Wake History [0]
  Wake Source Count - 1
  Wake Source [0]
    Type: Wake Timer
    Owner: [PROCESS] \Device\HarddiskVolume1\Windows\System32\services.exe
    Owner Supplied Reason: Windows will execute '\Microsoft\Windows\Media Center\mcupdate_scheduled' scheduled task that requested waking the computer.

Хмм… какого лешего ему понадобилось?

PS> $st = new-object -com('Schedule.Service')
PS> $st.Connect()
PS> $f = $st.GetFolder('\Microsoft\Windows\Media Center')
PS> $t = $f.GetTask('mcupdate_scheduled')
PS> $t.Definition.Actions

Id               :
Type             : 0
Path             : %SystemRoot%\ehome\mcupdate
Arguments        : -crl -hms -pscn 15
WorkingDirectory :

К сожалению, быстро поменять из PS настройки нельзя (нужно пересоздавать задание, хотя все свойства доступны для записи), поэтому пришлось делать всё руками через соответствующую оснастку консоли управления :-( .

И тут возникает вопрос: а вдруг таких подлянок несколько? А между тем, в оснастке нет поиска! Ответ, как всегда, можно найти в тандеме PowerShell + MSDN:

function Find-Wakers($path) {
  Write-Host -NoNewline '.'
  Write-Output $path.GetTasks(0) | where {
    $_.Definition.Settings.WakeToRun
  }
  foreach ($p in $path.GetFolders(0)) {
    Write-Output $(Find-Wakers($p))
  }
}
$st = new-object -com('Schedule.Service')
$st.Connect()
$tasks = @(Find-Wakers($st.GetFolder('\')))
Write-Host
$tasks | Format-Table -Property Name,Path -AutoSize 

Результат выполнения скрипта:

PS> .\Find-Wakers.ps1
.......................................................

Name           Path
----           ----
StartRecording \Microsoft\Windows\Media Center\StartRecording

Первый булыжник в огород Windows 7

0

И это… столь распиаренный обновлённый Windows Search 4.

Демонстрация на реальном примере, столь неприятно удивившем меня (800×600, 4 МБ):


Открыть в новом окне

Бонус – то же самое, но в Word 2007 SP2.

Update: индексирование текстовых файлов работает как положено, если в файле есть BOM. Но в любом случае, если честно, не очень понятно почему индексирование не работает как ожидается.

Вверх