Вышел 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

Реклама

Вышел PowerShell 7.0 Preview1


Страница загрузки https://github.com/PowerShell/PowerShell/releases/tag/v7.0.0-preview.1

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

Почему 7.0, а не 6.3? Читаем в блоге команды https://devblogs.microsoft.com/powershell/the-next-release-of-powershell-powershell-7/. По сути происходит очередной этап миграции платформы: после .Net Core 3.0 следующая версия будет 5.0, и она окончательно заменит .Net Framework (последняя версия будет 4.8), PowerShell 7.0 это шаг в том же направлении — заменить Windows PowerShell 5. Последующие выпуски PowerShell будут привязаны к выпускам .Net, в том числе LTS (Long Term Servicing).

Главное изменение внутри — теперь движок работает на .Net Core 3.0 Preview. Релиз .Net Core 3.0 намечен на сентябрь, значит релиз PowerShell 7.0 будет не позднее ноября.

Сейчас работа над PowerShell 7.0 будет заключаться в адаптации к .Net Core 3.0. С одной стороны можно убрать некоторый код и использовать стандарное API, которое стало доступным. С другой стороны можно использовать новые возможности, которые появились в 3.0. Например, теперь доступно WinForms, и мы вернем обратно Out-GridView (только на Windows конечно).

Если у вас есть идеи, предложения, то добро пожаловать на https://github.com/PowerShell/PowerShell/. Любой вклад идёт всем на пользу. Не думайте, что это сложно: идея, обсуждение, реализация — всё просто, и вы делаете только ту часть, которая вам важна и интересна, сообщество может подхватить и сделать остальное. Хлтя может не быстро. И это повод начать по-раньше.

Напомню также, что есть https://github.com/MicrosoftDocs/PowerShell-Docs , где вы можете запросить изменения в документацию или сделать их сами. Нашли ошибку — пишите сразу, не откладывайте.

Опыт перехода на Windows 10


Этот 2019 год последний в жизненном цикле Windows 7. Это ставит задачу перехода на более новую версию Windows 10 (1809/Ent 2019).

Самый главный опыт — систему надо ставить с нуля. Почему?

  1. Официально обновление поверх (in-place upgrade) не поддерживается.
  2. Существует недокументированный способ, как это обойти.
  3. Этим способом лучше не мигрировать, так как будут проблемы на каждом шагу:
    • Часто нужны новые версии драйверов для сетевых и видео карт.
    • Нужно предварительно снести антивирус. Манипуляции с KES 10 и 11 не дали надежного результата. Учтите, что KES 11 Device Control может работать на Windows 10 немного не так как раньше: у нас отвалились некоторые USB принтеры — заработали после правки настроек Device Control.
    • Нужно обязательно удалить App-V и TMG клиент до обновления.
    • Не все приложения будут нормально работать — их надо выявить и также удалить до обновления системы. Скорее всего само приложение надо обновить до версии, которое работает на Windows 10. Например, Crypto Pro 3 -> 4.
    • В Windows 7 версия профиля 3. На Windows 10 1809 — уже 6. Не факт, что профили пользователей смигрируется правильно и без потерь.
    • Windows 7 очень надежная система и скорее всего работает на конкретных компьютерах много лет. Это означает, что на диске скопилось много мусора. Установка поверх не удалит его полностью. Например, давно ненужные установленные программы и их рабочие файлы. Древние архивы и прочие «запасы» в профилях пользователей.

Установка новой системы также хороший повод протестировать и обновить версии других приложений. Например, перейти на Office 2016 или 2019 — про это будет отдельный пост.

Если у вас типовая конфигурация, то вы можете отладить обновление поверх. Но если у вас зоопарк оборудования и приложений, то вы съэкономите массу времени, если будете ставить новые системы с нуля.

.Net Core 3.0 и PowerShell Core


Если кратко, то в .Net Core 3.0 мы получим PowerShell Core как global tool.

Достаточно будет сделать:
dotnet tool install

Это будет работать в Docker контейнерах тоже.

Кстати (это уже совсем другая история) возможно уже в следующей предварительной версии 7.0.0 Preview1 PowerShell Core будет работать на .Net Core 3.0. Всё должно будет работать шустрее, да и набор API для разработчиков ощутимо расширяется.

Следующая версия PowerShell Core — PowerShell 7.0


Команда Microsoft официально объявила, что следующая версия PowerShell Core выйдет как PowerShell 7.0.

Основной посыл в том, что с переходом на .Net Core 3.0 пользователи получат версию почти на 90% совместимую с Windows PowerShell.

Имя PowerShell 7.0 без Core также призвано демонстрировать этот факт.

Ещё один важный момент: теперь выпуски основных версий будут следовать выпускам .Net Core. Это означает, что появятся LTS версии с увеличенным временем поддержки. Это будет стимулировать использование PowerShell Core в других продуктах. По-прежнему каждый месяц будут выходить предварительные версии для тестирования исправлений и новых функций.

Кроме этого PowerShell 7.0 в скором времени будет добавлено в Windows 10 как дополнительный компонент.

Настройка Start Layout в Windows 10


Теперь мы можем централизованно настраивать Start Layout для корпоративных пользователей.

Описано в блоге https://blogs.technet.microsoft.com/deploymentguys/2016/03/07/windows-10-start-layout-customization/

Документация https://docs.microsoft.com/en-us/windows/configuration/customize-and-export-start-layout

По поводу DesktopApplicationLinkPath — это работает, но сам файл lnk должен быть в папке меню, например, %ALLUSERPROFILE%\Microsoft\Windows\Start Menu\Programs

Памятка по установке RSAT


Последние версии RSAT уже не имеют msi файлов.

Установка через GUI не работает, поэтому скрипт:

$currentWU = Get-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" -Name "UseWUServer" | select -ExpandProperty UseWUServer
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" -Name "UseWUServer" -Value 0
Restart-Service wuauserv
Get-WindowsCapability -Name RSAT* -Online | Add-WindowsCapability –Online
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" -Name "UseWUServer" -Value $currentWU
Restart-Service wuauserv

Это отключает WSUS и грузит RSAT из Интернет. Вместо этого можно скачать ISO с FoD (Feature on Demand), распаковать и указать путь к этой директории в параметре Source.