Вышел PowerShell 7.0 Preview4


Команда Microsoft определилась со сроками выпуска окончательной версии PowerShell 7.0 — в декабре RC и в январе окончательная версия на базе .Net Core 3.1. Это будет LTS версия с поддержкой на несколько лет. Собственно версии будут привязаны к выпускам LTS версий .Net Core.

PowerShell 7.0 Preview4 вполне стабильная версия и баризуется на одном из последних релизов .Net Core 3.0 Preview8.

Прямые ссылки можно найти на GitHub. Ниже только краткие комментарии об изменениях.

ForEach-Object стал заметно быстрее для большинства сценариев, включая параллелизм (параметер -Parallel). Рекомендую попробовать в реальных сценариях.

Кстати посмотрите статью PowerShell ForEach-Object Parallel Feature. Обратите внимание, что параллелизм имеет накладные расходы и не всегда приводит к ускорению.

Еще ранее появилась новая телеметрия New Telemetry in PowerShell 7 Preview 3. Надеюсь, Microsoft поделится новой статистикой. Кто ещё не видел Dashboard?

Появился Ternary Operator:

$var = $isWindows ? "Windows" : "Not Windows"

Некоторым очень хотелось это иметь в языке.

За несколько последних месяцев Кирк Манро внёс неколько улучшений в отладчик и продолжает эту работу. Если вы активно используете откладчик, то подключайтесь к процессу — обратная связь всегда полезна.

Добавлена поддержка групповых политик (GPO). Если нет политик для PowerShell Core, то будут использоваться политики от Windows PowerShell. Это большой шаг к использованию PowerShell Core в корпоративной среде.

Продолжаю работать на улучшениями в PowerShell Core. Уже целая пачкаа улучшений производительности добавлена. Несколько ожидают одобрения и в планах ещё несколько. Результатом должно стать ускорение запуска и создания runspace (что важно для параллелизма).

Реклама

Убираем Persistent Chat


Собственно сам процесс простой: убрать всё касаемое Persistent Chat из топологии, применить её, запустить установщик на каждом сервере с Persistent Chat и удалить все компоненты.

После удаления Persistent Char из топологии и серверов, пользователи увидели в клиентах сообщение о том, что комнаты недоступны из-за сбоя. Пошли обращения в поддержку.

Лечение простое. В оснастке управления Skype for Business в разделе Persistent Chat нужно открыть политику и убрать галку Enable Persistent Chat.

Подробности в статье https://uclobby.com/2013/07/08/persistent-chat-your-chat-room-access-may-be-limited-due-to-an-outage/

Совместимость модулей с PowerShell Core


Этим летом мы могли убедиться, что в последних версиях Windows появился целый ряд модулей совместимых с PowerShell Core.

Их легко определить на наличию строки CompatiblePSEditions = @(‘Desktop’,’Core’) в файле манифеста. (Речь о модулях в папке C:\Windows\System32\WindowsPowerShell\v1.0\Modules\ )

Приближается время выпуска новой версии PowerShell Core 7.0, и самое время протестировать стандартные модули Windows, которыми вы пользуетесь? на совместимость с этой версией, тем более что только что появилась предварительная версия 7.0 Preview4.

Что делать, если выявлены проблемы совместимости? Создавайте обращение в репозитории https://github.com/PowerShell/WindowsCompatibility. Для модулей третьих лиц пишите разработчикам. Чем раньше, тем лучше.

Помните, что уже близко то время, когда PowerShell Core заменит Windows PowerShell полностью. Windows PowerShell уже несколько лет заморожен, и все новые возможности появляются только в Windows Core.

Office 2019 — Установка обновлений 1


Никак не доходят руки опубликовать накопленный опыт по поддержке Office 2019. Поэтому буду публиковать маленькие заметки. Тем более что постоянно обнаруживается что-то новое.

В принципе схема устновки обновлений не особо изменилась глобально: всё также есть отдельный сервис (ClickToRunSvc или Служба Microsoft Office «Нажми и работай»). А вот в деталях изменения есть, и они не очень-то документированы. Так в Task Scheduler появились задачи связанные с обнаружением и установкой Office 2019. По сути они запускают пару утилит с недокументированными параметрами. Причём список задач может меняться в зависимости от настроек установки обновлений.

Этот стандартный механизм установки обновлений включен по умолчанию, но может быть выключен, если вы хотите управлять установкой обновлений самостоятельно, например, через установку пакетов или приложений SCCM, но при этом механизм установки обновлений SCCM (как и стандартный) уже не будет работать.

Включение (это по умолчанию включено, но лучше всегда использовать явные значения) осуществляется в XML файле опцией OfficeMgmtCOM=»False» или групповой политикой «Office 365 Client Management» -> Disable. Описание этой политики какое-то путанное и может ввести в заблуждение, так что будьте внимательны.

Так как мы не используем SCCM для установки обновлений ОС (мы используем WSUS, но, как известно, обновлений для Office 2019 на нём не бывает), то мы решили раскатывать новые версии Office 2019 через шару, и как раз OfficeMgmtCOM=»False» и «Office 365 Client Management» -> Disable это то, что нам нужно. Точнее при установке ОС Office 2019 накатывается в виде обновленного приложения, а уже последующие версии приезжают с шары (как раз срабатывают задачи в Task Scheduler).

Шара прописывается политикой Update Path. Также вы можете включить политику Update Deadline (например, дней на 5).

При этом SCCM прекрасно отображает Dashboard Office 365 Client Management с цифрами сколько и каких версий Office 2019 и Office 365 установлено. (Это собирается в Hardware Inventory.)

Продолжение следует.

Медленное подключение MMC Computer Management к удаленным компьютерам


В SCCM консоле мы активно используем Recast RCT (Right Click Tools). В частности запускаем оснастку MMC Computer Management. В один прекрасный момент эта оснастка стала подвисать при запуске на окне с ползунком прогресса, да ещё иной раз аварийно завершаться, если не дождаться завершения подключения.

Команда netstat показала SYN_SENT. Иначе говоря на целевых компьютерах фаервол что-то блокировал. Аудит правил фаервола ничего не дал: все правила удаленного управления были на месте.

С коллегой провели некоторые изыскания. Просто запустили mmc.exe и перебирали все оснастки, которые подгружаются в Computer Management. Обнаружили, что проблема есть с двумя из них: Performance и Windows Backup. Удивительно, что в фаерволе нет стандартных правил для них.

Существует групповая политика, которая позволяет управлять (включать и запрещать) оснастками MMC. Мы попытались выключить эти две оснастки, которыми не пользовались. Оказалось, что в политике нет варианта для Windows Backup.

Решением стало добавление разрешающих правил в фаервол для двух процессов plasrv.exe и wbadmin.exe. (Найти их помогла всё та же утилита netstat -ano)

Как только политика с правилами фаервола применилась к компьютерам, оснастка Computer Management стала снова быстро подключаться.

Почему мой Windows 10 загружается так долго?


Давно руки не доходили проанализировать загрузку корпоративных систем, и вот это случилось.

Есть давний инструмент Windows Performance Toolkit, который следует регулярно применять в корпоративной сети — рекомендую.

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

При анализе трассировки загрузки Windows 10 была обнаружена общая проблема: сервис «Служба Office Нажми и Работай» при запуске пытается сделать сетевой запрос, который тормозит. По всей видимости это запрос в Облако, а так как корпоративная сеть закрыта фаерволом, то неудивительно, что запрос тормозит и замедляет старт службы. Собственно облачные сервисы не используются, поэтому хорошо бы от этого избавиться. После перевода службы в Delayed Start загрузка системы улучшается. (Не понятны последствия для самого Office, но, как говорится, жизнь покажет, точнее, протестируем.)

Второй пример частный. При анализе трассировки загрузки системы было замечено замедление при вызове некой функции, в имени которой присутсвует Home. Имена соседних функций также информативны и говорят о сетевом запросе — очевидно проблема с монтированием сетевой домашней папки в виде диска. В свойствах доменной учётной записи на закладке Profile действительно есть эти настройки. Только указан старый, уже неиспользуемый, сервер! Так как пользователь никогда не пользовался домашней папкой, то никто не знал об ошибке конфигурации. После удаления этой настройки время загрзки улучшилось на 17 секунд, а вместе с первым изменением более чем на 20 секунд.

Общее впечатление после анализа процесса загрузки — Windows 10 поприятнее Windows 7. Я ожидал худшего на старом железе, но ожидания не оправдались.

Хотя загрузка теперь в пределах нормы (100 секунд) для корпоративной системы (с кучей групповых политик и злобным антивирусом на борту, тем не менее вижу ещё потенциал для ускорения загрузки. Возможно удастся найти другие узкие и проблемные места в загрузке из-за «ошибок» в корпоративных шаблонах конфигураций.

Вышел PowerShell 7.0 Preview2


Стоит попробовать его в деле!

В основе уже .Net Core 3.0 Preview6, который очень хорош в быстродействии и особенно в управлении памятью: вы можете обнаружить, что теперь процесс PowerShell не раздувается в памяти во многих сценариях как ранее.

Помимо улучшений производительности полученных из Net Core 3.0 Preview6 в самом PowerShell Core добавлено несколько коммитов, которые также улучшают производительность.

Так Foreach-Object в некоторых случаях будет работать вдвое быстрее! Также можно сказать о WildcardPattern.IsMatch(). Последний используется в нескольких местах в движке, который также стал бастрее, например, при файловых операциях глоббинга. Там также есть ещё несколько улучшений производительности для файловых операций.

Из функциональных добавлений DBNull.Value и NullString.Value теперь работают точно также как $null, что полезно при работе с базами данных.

-split оператор теперь понимает отрицательный параметр, чтобы выполнять разбиение строки от конца к началу. https://github.com/PowerShell/PowerShell/pull/8960

Для разработчиков теперь работает dotnet tool install —global PowerShell — вы получите версию 6.2.2 как глобальный инструмент. https://devblogs.microsoft.com/powershell/introducing-powershell-as-net-global-tool/

Теперь не нужно спецально замерять время выполнения команды в консоли: Get-History покажет вам поле Duration!

Get-History

  Id     Duration CommandLine
  --     -------- -----------
   1        6.153 [io.Directory]::GetFileSystemEntries
   2        0.416 [io.Directory]::GetFileSystemEntries("./")

Командлет Set-Service имеет параметер SecurityDescriptorSddl для установки прав.

Теперь можно использовать зарезервированные имена для имен методов, функций и ресурсов.

Если вы часто использете COM на Windows, то оцените возможность увидеть сигнатуру метода. Ранее это работало только для обычных методов

$shell = New-Object -ComObject "Shell.Application"
$shell.AddToRecent

OverloadDefinitions
-------------------
void AddToRecent (Variant varFile, string bstrCategory)

В основной код вошли TempDrive: и UseAbbreviationExpansion. Первое интуитивно понятно. Второе позволяет вещи вроде:

gcm -UseAbbreviationExpansion i-psdf

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Cmdlet          Import-PowerShellDataFile                          6.1.0.0    Microsoft.PowerShell.Utility

Остальное можно найти на сайте GitHub https://github.com/PowerShell/PowerShell/releases/tag/v7.0.0-preview.2