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.