Заметки

Записи

PowerShell и разбор вложенного XML

14 июля 2026

Соблазн разобрать XML регулярками возникает у всех и заканчивается одинаково. В PowerShell приведение строки к [xml] даёт полноценный XmlDocument, по которому можно ходить точечно.

Главная ловушка — пространства имён. Как только в документе появляется xmlns, обычный XPath перестаёт что-либо находить, причём молча: запрос возвращает пустоту, а не ошибку. Лечится через XmlNamespaceManager с явной регистрацией префикса.

Вторая мелочь: свойства узлов чувствительны к регистру, в отличие от почти всего остального в PowerShell. Опечатка в имени элемента снова даст пустой результат без единого предупреждения.

FileSystemWatcher: что ломается на сетевых шарах

2 июня 2026

На локальном диске он работает предсказуемо. На UNC-пути начинается интересное.

Внутренний буфер событий по умолчанию невелик, и при массовом копировании файлов события просто теряются — без исключения, без записи в лог. Увеличение InternalBufferSize помогает, но не решает проблему полностью.

Отдельная беда — обрыв связи с шарой. Watcher уходит в состояние, где подписки живы, а события не приходят вообще. Единственный надёжный способ — подписаться на Error и пересоздавать объект целиком.

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

Кодировки при перенаправлении вывода

19 апреля 2026

Классика: скрипт печатает кириллицу в консоль нормально, а в файле — вопросительные знаки. В PowerShell 5.1 за это отвечает $OutputEncoding и кодировка по умолчанию у Out-File, и это разные настройки.

В PowerShell 7 значением по умолчанию стал UTF-8 без BOM, что решило половину проблем и создало новые — при чтении старых файлов, записанных с BOM.