Новые возможности PowerShell Core 6.1What's New in PowerShell Core 6.1

Ниже указаны некоторые основные новые функции и изменения, которые были введены в PowerShell Core 6.1.Below is a selection of some of the major new features and changes that have been introduced in PowerShell Core 6.1.

Кроме того, доступно множество добавлений, позволяющих повысить быстродействие и стабильность PowerShell (а также целый ряд исправлений ошибок).There's also tons of "boring stuff" that make PowerShell faster and more stable (plus lots and lots of bug fixes)! Полный список изменений см. в нашем журнале изменений на сайте GitHub.For a full list of changes, check out our changelog on GitHub.

Несмотря на то что далее мы называем лишь часть имен, мы выражаем благодарность всем участникам сообщества, которые внесли свой вклад в этот выпуск.And while we call out some names below, thank you to all of the community contributors that made this release possible.

.NET Core 2.1.NET Core 2.1

После выпуска в мае среда PowerShell Core 6.1 перемещена на .NET Core 2.1, что привело к ряду улучшений в PowerShell, включая:PowerShell Core 6.1 moved to .NET Core 2.1 after it was released in May, resulting in a number of improvements to PowerShell, including:

Пакет обеспечения совместимости Windows для .NET CoreWindows Compatibility Pack for .NET Core

Команда разработчиков .NET добавила пакет обеспечения совместимости Windows для .NET Core — набор сборок, которые добавляют несколько удаленных API-интерфейсов обратно в .NET Core в Windows.On Windows, the .NET team shipped the Windows Compatibility Pack for .NET Core, a set of assemblies that add a number of removed APIs back to .NET Core on Windows.

Мы добавили пакет обеспечения совместимости Windows в выпуск PowerShell Core 6.1, чтобы сделать доступными все модули или сценарии, использующие эти API-интерфейсы.We've added the Windows Compatibility Pack to PowerShell Core 6.1 release so that any modules or scripts that use these APIs can rely on them being available.

Благодаря пакету обеспечения совместимости Windows в PowerShell Core можно использовать более 1900 командлетов, входящих в состав обновления Windows от 10 октября 2018 г. и Windows Server 2019.The Windows Compatibility Pack enables PowerShell Core to use more than 1900 cmdlets that ship with Windows 10 October 2018 Update and Windows Server 2019.

Поддержка списков разрешенных приложенийSupport for Application Whitelisting

В PowerShell Core 6.1 реализована та же поддержка, что и в Windows PowerShell 5.1, которая позволяет добавлять приложения в список разрешенных в AppLocker и Device Guard.PowerShell Core 6.1 has parity with Windows PowerShell 5.1 supporting AppLocker and Device Guard application whitelisting. Добавление приложений в список разрешенных обеспечивает более детализированное управление двоичными файлами, которые могут выполняться с помощью ограниченного языкового режима PowerShell.Application whitelisting allows granular control of what binaries are allowed to be executed used with PowerShell Constrained Language mode.

Повышена производительность.Performance improvements

В PowerShell Core 6.0 внесены значительные усовершенствования производительности.PowerShell Core 6.0 made some significant performance improvements. PowerShell Core 6.1 и далее повышает скорость выполнения определенных операций.PowerShell Core 6.1 continues to improve the speed of certain operations.

Например, скорость выполнения Group-Object была увеличена до 66 %.For example, Group-Object has been sped up by 66%:

Measure-Command { 1..100000 | % {Get-Random -Minimum 1 -Maximum 10000} | Group-Object }
Windows PowerShell 5.1Windows PowerShell 5.1 PowerShell Core 6.0PowerShell Core 6.0 PowerShell Core 6.1PowerShell Core 6.1
Время (с)Time (sec) 25,17825.178 19,65319.653 6,6416.641
Ускорение (%)Speed-up (%) Н/ДN/A 21,9 %21.9% 66,2 %66.2%

Аналогично, более чем на 15 % улучшена производительность сценариев сортировки следующего вида.Similarly, sorting scenarios like this one have improved by more than 15%:

Measure-Command { 1..100000 | % {Get-Random -Minimum 1 -Maximum 10000} | Sort-Object }
Windows PowerShell 5.1Windows PowerShell 5.1 PowerShell Core 6.0PowerShell Core 6.0 PowerShell Core 6.1PowerShell Core 6.1
Время (с)Time (sec) 12,17012.170 8,4938.493 7,087.08
Ускорение (%)Speed-up (%) Н/ДN/A 30,2 %30.2% 16,6 %16.6%

После регрессии из Windows PowerShell также было значительно ускорено выполнение Import-Csv.Import-Csv has also been sped up significantly after a regression from Windows PowerShell. В следующем примере используется тестовый CSV-файл с 26 616 строками и шестью столбцами.The following example uses a test CSV with 26,616 rows and six columns:

Measure-Command {$a = Import-Csv foo.csv}
Windows PowerShell 5.1Windows PowerShell 5.1 PowerShell Core 6.0PowerShell Core 6.0 PowerShell Core 6.1PowerShell Core 6.1
Время (с)Time (sec) 0,4410.441 1,0691.069 0,2680.268
Ускорение (%)Speed-up (%) Н/ДN/A –142,4 %-142.4% 74,9 % (39,2 % в WPS)74.9% (39.2% from WPS)

Наконец, преобразование из формата JSON в PSObject было ускорено более чем на 50 % по сравнению с Windows PowerShell.Lastly, conversion from JSON into PSObject has been sped up by more than 50% since Windows PowerShell. В следующем примере используется тестовый JSON-файл размером около 2 МБ.The following example uses a ~2MB test JSON file:

Measure-Command {Get-Content .\foo.json | ConvertFrom-Json}
Windows PowerShell 5.1Windows PowerShell 5.1 PowerShell Core 6.0PowerShell Core 6.0 PowerShell Core 6.1PowerShell Core 6.1
Время (с)Time (sec) 0,2590.259 0,5770.577 0,1250.125
Ускорение (%)Speed-up (%) Н/ДN/A –122,8 %-122.8% 78,3 % (51,7 % в WPS)78.3% (51.7% from WPS)

Проверка system32 на наличие совместимых встроенных модулей в WindowsCheck system32 for compatible in-box modules on Windows

В обновлении 1809 Windows 10 и Windows Server 2019 мы обновили несколько готовых модулей PowerShell, и теперь они могут помечаться как совместимые с PowerShell Core.In the Windows 10 1809 update and Windows Server 2019, we updated a number of in-box PowerShell modules to mark them as compatible with PowerShell Core.

При запуске PowerShell Core 6.1 будет автоматически включать $windir\System32 как часть переменной среды PSModulePath.When PowerShell Core 6.1 starts up, it will automatically include $windir\System32 as part of the PSModulePath environment variable. Однако она предоставляет модули в Get-Module и Import-Module, только если CompatiblePSEdition помечен как совместимый с Core.However, it only exposes modules to Get-Module and Import-Module if its CompatiblePSEdition is marked as compatible with Core.

Get-Module -ListAvailable

Примечание

В зависимости от установленных ролей и компонентов будут доступны самые разные модули.You may see different available modules depending on what roles and features are installed.

...
    Directory: C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules

ModuleType Version    Name                                PSEdition ExportedCommands
---------- -------    ----                                --------- ----------------
Manifest   2.0.1.0    Appx                                Core,Desk {Add-AppxPackage, Get-AppxPackage, Get-AppxPacka...
Manifest   1.0.0.0    BitLocker                           Core,Desk {Unlock-BitLocker, Suspend-BitLocker, Resume-Bit...
Manifest   1.0.0.0    DnsClient                           Core,Desk {Resolve-DnsName, Clear-DnsClientCache, Get-DnsC...
Manifest   1.0.0.0    HgsDiagnostics                      Core,Desk {New-HgsTraceTarget, Get-HgsTrace, Get-HgsTraceF...
Binary     2.0.0.0    Hyper-V                             Core,Desk {Add-VMAssignableDevice, Add-VMDvdDrive, Add-VMF...
Binary     1.1        Hyper-V                             Core,Desk {Add-VMDvdDrive, Add-VMFibreChannelHba, Add-VMHa...
Manifest   2.0.0.0    NetAdapter                          Core,Desk {Disable-NetAdapter, Disable-NetAdapterBinding, ...
Manifest   1.0.0.0    NetEventPacketCapture               Core,Desk {New-NetEventSession, Remove-NetEventSession, Ge...
Manifest   2.0.0.0    NetLbfo                             Core,Desk {Add-NetLbfoTeamMember, Add-NetLbfoTeamNic, Get-...
Manifest   1.0.0.0    NetNat                              Core,Desk {Get-NetNat, Get-NetNatExternalAddress, Get-NetN...
Manifest   2.0.0.0    NetQos                              Core,Desk {Get-NetQosPolicy, Set-NetQosPolicy, Remove-NetQ...
Manifest   2.0.0.0    NetSecurity                         Core,Desk {Get-DAPolicyChange, New-NetIPsecAuthProposal, N...
Manifest   1.0.0.0    NetSwitchTeam                       Core,Desk {New-NetSwitchTeam, Remove-NetSwitchTeam, Get-Ne...
Manifest   1.0.0.0    NetWNV                              Core,Desk {Get-NetVirtualizationProviderAddress, Get-NetVi...
Manifest   2.0.0.0    TrustedPlatformModule               Core,Desk {Get-Tpm, Initialize-Tpm, Clear-Tpm, Unblock-Tpm...
...

С помощью параметра -SkipEditionCheck это поведение можно переопределить для отображения всех модулей.You can override this behavior to show all modules using the -SkipEditionCheck switch parameter. Мы также добавили свойство PSEdition в выходные данные таблицы.We've also added a PSEdition property to the table output.

Get-Module Net* -ListAvailable -SkipEditionCheck
    Directory: C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules

ModuleType Version    Name                        PSEdition ExportedCommands
---------- -------    ----                        --------- ----------------
Manifest   2.0.0.0    NetAdapter                  Core,Desk {Disable-NetAdapter, Disable-NetAdapterBinding, ...
Manifest   1.0.0.0    NetConnection               Core,Desk {Get-NetConnectionProfile, Set-NetConnectionProf...
Manifest   1.0.0.0    NetDiagnostics              Desk      Get-NetView
Manifest   1.0.0.0    NetEventPacketCapture       Core,Desk {New-NetEventSession, Remove-NetEventSession, Ge...
Manifest   2.0.0.0    NetLbfo                     Core,Desk {Add-NetLbfoTeamMember, Add-NetLbfoTeamNic, Get-...
Manifest   1.0.0.0    NetNat                      Core,Desk {Get-NetNat, Get-NetNatExternalAddress, Get-NetN...
Manifest   2.0.0.0    NetQos                      Core,Desk {Get-NetQosPolicy, Set-NetQosPolicy, Remove-NetQ...
Manifest   2.0.0.0    NetSecurity                 Core,Desk {Get-DAPolicyChange, New-NetIPsecAuthProposal, N...
Manifest   1.0.0.0    NetSwitchTeam               Core,Desk {New-NetSwitchTeam, Remove-NetSwitchTeam, Get-Ne...
Manifest   1.0.0.0    NetTCPIP                    Core,Desk {Get-NetIPAddress, Get-NetIPInterface, Get-NetIP...
Manifest   1.0.0.0    NetWNV                      Core,Desk {Get-NetVirtualizationProviderAddress, Get-NetVi...
Manifest   1.0.0.0    NetworkConnectivityStatus   Core,Desk {Get-DAConnectionStatus, Get-NCSIPolicyConfigura...
Manifest   1.0.0.0    NetworkSwitchManager        Core,Desk {Disable-NetworkSwitchEthernetPort, Enable-Netwo...
Manifest   1.0.0.0    NetworkTransition           Core,Desk {Add-NetIPHttpsCertBinding, Disable-NetDnsTransi...

Дополнительные сведения об этом поведении см. в PowerShell RFC0025.For more information about this behavior, check out PowerShell RFC0025.

Командлеты и отрисовка MarkdownMarkdown cmdlets and rendering

Markdown — это стандарт для создания документов с читаемым открытым текстом с базовым форматированием, которое может отображаться в формате HTML.Markdown is a standard for creating readable plaintext documents with basic formatting that can be rendered into HTML.

Мы добавили в версию 6.1 несколько командлетов, которые позволяют преобразовывать и отображать документы Markdown.We've added some cmdlets in 6.1 that allow you to convert and render Markdown documents in the console, including:

  • ConvertFrom-Markdown
  • Get-MarkdownOption
  • Set-MarkdownOption
  • Show-Markdown

Например, Show-Markdown отрисовывает файл Markdown в консоли.For example, Show-Markdown renders a Markdown file in the console:

Пример Show-Markdown

Дополнительные сведения об использовании этих командлетов см. в этом документе RFC.For more information about how these cmdlets work, check out this RFC.

Флаги экспериментальных функцийExperimental feature flags

Флаги экспериментальных функций позволяют включать функции, которые пока не являются окончательными.Experimental feature flags enable users to turn on features that haven't been finalized. Эти экспериментальные функции не поддерживаются и могут содержать ошибки.These experimental features aren't supported and may have bugs.

Дополнительные сведения об этой функции см. в PowerShell RFC0029.You can learn more about this feature in PowerShell RFC0029.

Усовершенствования веб-командлетовWeb cmdlet improvements

Выражаем благодарность @markekraus за улучшения, внесенные в веб-командлеты: Invoke-WebRequestThanks to @markekraus, a whole slew of improvements have been made to our web cmdlets: Invoke-WebRequest и Invoke-RestMethod.and Invoke-RestMethod.

  • PR #6109 — по умолчанию задана кодировка UTF-8 для ответов application-jsonPR #6109 - default encoding set to UTF-8 for application-json responses
  • PR #6018 - — параметр -SkipHeaderValidation, позволяющий использовать заголовки Content-Type, которые не соответствуют стандартамPR #6018 - -SkipHeaderValidation parameter to allow Content-Type headers that aren't standards-compliant
  • PR #5972 - — параметр Form для упрощенной поддержки multipart/form-dataPR #5972 - Form parameter to support simplified multipart/form-data support
  • PR #6338 — соответствующая, не учитывающая регистр обработка ключей отношенияPR #6338 - Compliant, case-insensitive handling of relation keys
  • PR #6447 — добавление параметра -Resume для веб-командлетовPR #6447 - Add -Resume parameter for web cmdlets

Усовершенствования удаленного взаимодействияRemoting improvements

PowerShell Direct для контейнеров сначала пытается использовать PowerShell CorePowerShell Direct for Containers tries to use PowerShell Core first

PowerShell Direct входит в состав PowerShell и Hyper-V и позволяет подключаться к виртуальной машине Hyper-V или контейнеру без сетевого соединения или других служб удаленного управления PowerShell.PowerShell Direct is a feature of PowerShell and Hyper-V that allows you to connect to a Hyper-V VM or Container without network connectivity or other remote management services.

В прошлом для подключения PowerShell Direct использовался готовый экземпляр Windows PowerShell в контейнере.In the past, PowerShell Direct connected using the inbox Windows PowerShell instance on the Container. Теперь PowerShell Direct сначала пытается подключиться с помощью любого доступного pwsh.exe в переменной средыPATH.Now, PowerShell Direct first attempts to connect using any available pwsh.exe on the PATH environment variable. Если pwsh.exe недоступен, PowerShell Direct переключается на использование powershell.exe.If pwsh.exe isn't available, PowerShell Direct falls back to use powershell.exe.

Enable-PSRemoting теперь создает отдельные конечные точки удаленного взаимодействия для предварительных версийEnable-PSRemoting now creates separate remoting endpoints for preview versions

Enable-PSRemoting теперь создает две конфигурации сеанса удаленного взаимодействия.Enable-PSRemoting now creates two remoting session configurations:

  • Одна для основного номера версии PowerShell.One for the major version of PowerShell. Например, PowerShell.6.For example,PowerShell.6. Эта конечная точка может быть основной в обновлениях дополнительного номера версии как конфигурация сеанса PowerShell 6 на уровне системы.This endpoint that can be relied upon across minor version updates as the "system-wide" PowerShell 6 session configuration
  • Одна конфигурация сеанса для конкретной версии, например: PowerShell.6.1.0One version-specific session configuration, for example: PowerShell.6.1.0

Это полезно, если вы хотите, чтобы на одном компьютере было установлено и доступно несколько версий PowerShell 6.This behavior is useful if you want to have multiple PowerShell 6 versions installed and accessible on the same machine.

Кроме того, теперь в предварительных версиях PowerShell доступны собственные конфигурации сеанса удаленного взаимодействия после выполнения командлета Enable-PSRemoting.Additionally, preview versions of PowerShell now get their own remoting session configurations after running the Enable-PSRemoting cmdlet:

C:\WINDOWS\system32> Enable-PSRemoting

Если вы еще не настроили WinRM, выходные данные могут отличаться.Your output may be different if you haven't set up WinRM before.

WinRM is already set up to receive requests on this computer.
WinRM is already set up for remote management on this computer.

Затем вы увидите отдельные конфигурации сеанса PowerShell для предварительных и стабильных сборок PowerShell 6, а также для каждой конкретной версии.Then you can see separate PowerShell session configurations for the preview and stable builds of PowerShell 6, and for each specific version.

Get-PSSessionConfiguration
Name          : PowerShell.6.2-preview.1
PSVersion     : 6.2
StartupScript :
RunAsUser     :
Permission    : NT AUTHORITY\INTERACTIVE AccessAllowed, BUILTIN\Administrators AccessAllowed, BUILTIN\Remote Management Users AccessAllowed

Name          : PowerShell.6-preview
PSVersion     : 6.2
StartupScript :
RunAsUser     :
Permission    : NT AUTHORITY\INTERACTIVE AccessAllowed, BUILTIN\Administrators AccessAllowed, BUILTIN\Remote Management Users AccessAllowed

Name          : powershell.6
PSVersion     : 6.1
StartupScript :
RunAsUser     :
Permission    : NT AUTHORITY\INTERACTIVE AccessAllowed, BUILTIN\Administrators AccessAllowed, BUILTIN\Remote Management Users AccessAllowed

Name          : powershell.6.1.0
PSVersion     : 6.1
StartupScript :
RunAsUser     :
Permission    : NT AUTHORITY\INTERACTIVE AccessAllowed, BUILTIN\Administrators AccessAllowed, BUILTIN\Remote Management Users AccessAllowed

Синтаксис user@host:port, поддерживаемый для SSHuser@host:port syntax supported for SSH

SSH-клиенты обычно поддерживают строки подключения в формате user@host:port.SSH clients typically support a connection string in the format user@host:port. С появлением SSH как протокола для удаленного взаимодействия PowerShell мы добавили поддержку этого формата строки подключения.With the addition of SSH as a protocol for PowerShell Remoting, we've added support for this format of connection string:

Enter-PSSession -HostName fooUser@ssh.contoso.com:2222

Параметр MSI для добавления контекстного меню оболочки Проводника в WindowsMSI option to add explorer shell context menu on Windows

Выражаем благодарность @bergmeister, так как теперь можно включать контекстное меню в Windows.Thanks to @bergmeister, now you can enable a context menu on Windows. Вы можете открыть системную установку PowerShell 6.1 из любой папки в Проводнике Windows.Now you can open your system-wide installation of PowerShell 6.1 from any folder in the Windows Explorer:

Контекстное меню оболочки для PowerShell 6

Полезные возможностиGoodies

"Запуск от имени администратора" в списке переходов в Windows"Run as Administrator" in the Windows shortcut jump list

Выражаем благодарность @bergmeister, так как теперь список переходов ярлыка PowerShell Core содержит возможность "Запуск от имени администратора".Thanks to @bergmeister, the PowerShell Core shortcut's jump list now includes "Run as Administrator":

"Запуск от имени администратора" в списке переходов PowerShell 6

cd - возвращается в предыдущий каталогcd - returns to previous directory

C:\Windows\System32> cd C:\
C:\> cd -
C:\Windows\System32>

Или в LinuxOr on Linux:

PS /etc> cd /usr/bin
PS /usr/bin> cd -
PS /etc>

Кроме того, cd и cd -- изменяются на $HOME.Also, cd and cd -- change to $HOME.

Test-Connection

Выражаем благодарность @iSazonov за перенос командлета Test-Connection в PowerShell Core.Thanks to @iSazonov, the Test-Connection cmdlet has been ported to PowerShell Core.

Запуск Update-Help без прав администратораUpdate-Help as non-admin

По многочисленным просьбам Update-Help больше не требуется запускать от имени администратора.By popular demand, Update-Help no longer needs to be run as an administrator. Теперь Update-Help по умолчанию сохраняет справку в папку пользователя.Update-Help now defaults to saving help to a user-scoped folder.

Новые методы и свойства в PSCustomObjectNew methods/properties on PSCustomObject

Благодаря @iSazonov мы добавили новые методы и свойства в PSCustomObject.Thanks to @iSazonov, we've added new methods and properties to PSCustomObject. PSCustomObject теперь включает свойство Count/Length, как и другие объекты.PSCustomObject now includes a Count/Length property like other objects.

$PSCustomObject = [pscustomobject]@{foo = 1}

$PSCustomObject.Length
1
$PSCustomObject.Count
1

Здесь также используются методы ForEach и Where методы, которые позволяют работать с элементами PSCustomObject и фильтровать их.This work also includes ForEach and Where methods that allow you to operate and filter on PSCustomObject items:

$PSCustomObject.ForEach({$_.foo + 1})
2
$PSCustomObject.Where({$_.foo -gt 0})
foo
---
  1

Where-Object -Not

Благодаря @SimonWahlin мы добавили параметр -Not в Where-Object.Thanks to @SimonWahlin, we've added the -Not parameter to Where-Object. Теперь вы можете отфильтровать объект в конвейере для получения отсутствия свойства или нулевого и пустого значения свойства.Now you can filter an object at the pipeline for the non-existence of a property, or a null/empty property value.

Например, эта команда возвращает все службы, у которых нет зависимых служб.For example, this command returns all services that don't have any dependent services defined:

Get-Service | Where-Object -Not DependentServices

New-ModuleManifest создает документ в UTF-8 без BOMNew-ModuleManifest creates a BOM-less UTF-8 document

Учитывая наш переход на UTF-8 без BOM в PowerShell 6.0, мы обновили командлет New-ModuleManifest, чтобы вместо документа в UTF-16 создавать документ в UTF-8 без BOM.Given our move to BOM-less UTF-8 in PowerShell 6.0, we've updated the New-ModuleManifest cmdlet to create a BOM-less UTF-8 document instead of a UTF-16 one.

Преобразования из PSMethod в делегатConversions from PSMethod to Delegate

Выражаем благодарность @powercode, так как теперь поддерживается преобразование PSMethod в делегат.Thanks to @powercode, we now support the conversion of a PSMethod into a delegate. Это позволяет выполнять такие действия, как передача PSMethod [M]::DoubleStrLen в виде значения делегата в [M]::AggregateString.This allows you to do things like passing PSMethod [M]::DoubleStrLen as a delegate value into [M]::AggregateString:

class M {
    static [int] DoubleStrLen([string] $value) { return 2 * $value.Length }

    static [long] AggregateString([string[]] $values, [func[string, int]] $selector) {
        [long] $res = 0
        foreach($s in $values){
            $res += $selector.Invoke($s)
        }
        return $res
    }
}

[M]::AggregateString((gci).Name, [M]::DoubleStrLen)

Дополнительные сведения об этом изменении см. в PR #5287.For more info on this change, check out PR #5287.

Стандартное отклонение в Measure-ObjectStandard deviation in Measure-Object

Благодаря @CloudyDino мы добавили свойство StandardDeviation в Measure-Object.Thanks to @CloudyDino, we've added a StandardDeviation property to Measure-Object:

Get-Process | Measure-Object -Property CPU -AllStats
Count             : 308
Average           : 31.3720576298701
Sum               : 9662.59375
Maximum           : 4416.046875
Minimum           :
StandardDeviation : 264.389544720926
Property          : CPU

GetPfxCertificate -Password

Выражаем благодарность @maybe-hello-world, так как Get-PfxCertificate теперь имеет Password параметр, который принимает SecureString.Thanks to @maybe-hello-world, Get-PfxCertificate now has the Password parameter, which takes a SecureString. Это позволяет вам использовать его не интерактивно.This allows you to use it non-interactively:

$certFile = '\\server\share\pwd-protected.pfx'
$certPass = Read-Host -AsSecureString -Prompt 'Enter the password for certificate: '

$certThumbPrint = (Get-PfxCertificate -FilePath $certFile -Password $certPass ).ThumbPrint

Удаление функции moreRemoval of the more function

Раньше в состав PowerShell входила функция Windows more, которая упаковывала more.com.In the past, PowerShell shipped a function on Windows called more that wrapped more.com. Сейчас эта функция удалена.That function has now been removed.

Кроме того, функция help изменена для использования more.com в Windows или пейджер системы по умолчанию, определяемый $env:PAGER на платформах, отличных от Windows.Also the help function changed to use more.com on Windows, or the system's default pager specified by $env:PAGER on non-Windows platforms.

Теперь cd DriveName: возвращает пользователей в текущий рабочий каталог на этом дискеcd DriveName: now returns users to the current working directory in that drive

Раньше при использовании Set-Location или cd для возврата на PSDrive пользователи отправлялись в расположение по умолчанию для этого диска.Previously, using Set-Location or cd to return to a PSDrive sent users to the default location for that drive.

Выражаем благодарность @mcbobke, так как теперь пользователи отправляются в последний известный текущий рабочий каталог для данного сеанса.Thanks to @mcbobke, users are now sent to the last known current working directory for that session.

Ускорители типов Windows PowerShellWindows PowerShell type accelerators

Мы включили в Windows PowerShell следующие ускорители типов для упрощения работы с их соответствующими типами.In Windows PowerShell, we included the following type accelerators to make it easier to work with their respective types:

  • [adsi]: System.DirectoryServices.DirectoryEntry[adsi]: System.DirectoryServices.DirectoryEntry
  • [adsisearcher]: System.DirectoryServices.DirectorySearcher[adsisearcher]: System.DirectoryServices.DirectorySearcher
  • [wmi]: System.Management.ManagementObject[wmi]: System.Management.ManagementObject
  • [wmiclass]: System.Management.ManagementClass[wmiclass]: System.Management.ManagementClass
  • [wmisearcher]: System.Management.ManagementObjectSearcher[wmisearcher]: System.Management.ManagementObjectSearcher

Эти ускорители не были включены в PowerShell 6, но были добавлены в PowerShell 6.1 в Windows.These type accelerators were not included in PowerShell 6, but have been added to PowerShell 6.1 running on Windows.

Эти типы полезны при создании объектов AD и WMI.These types are useful in easily constructing AD and WMI objects.

Например, можно выполнить запрос с помощью LDAP.For example, you can query using LDAP:

[adsi]'LDAP://CN=FooUse,OU=People,DC=contoso,DC=com'

В следующем примере создается объект CIM Win32_OperatingSystem.Following example creates a Win32_OperatingSystem CIM object:

[wmi]"Win32_OperatingSystem=@"
SystemDirectory : C:\WINDOWS\system32
Organization    : Contoso IT
BuildNumber     : 18234
RegisteredUser  : Contoso Corp.
SerialNumber    : 12345-67890-ABCDE-F0123
Version         : 10.0.18234

Этот пример возвращает объект ManagementClass для класса Win32_OperatingSystem.This example returns a ManagementClass object for Win32_OperatingSystem class.

[wmiclass]"Win32_OperatingSystem"
   NameSpace: ROOT\cimv2

Name                                Methods              Properties
----                                -------              ----------
Win32_OperatingSystem               {Reboot, Shutdown... {BootDevice, BuildNumber, BuildType, Caption...}

Псевдоним -lp для всех параметров -LiteralPath-lp alias for all -LiteralPath parameters

Выражаем благодарность @kvprasoon, так как теперь у нас есть псевдоним параметра -lp для всех встроенных командлетов PowerShell, у которых есть параметр -LiteralPath.Thanks to @kvprasoon, we now have a parameter alias -lp for all the built-in PowerShell cmdlets that have a -LiteralPath parameter.

Критические измененияBreaking Changes

Пути установки на основе MSI в WindowsMSI-based installation paths on Windows

Теперь в Windows пакет MSI устанавливается по следующему пути:On Windows, the MSI package now installs to the following path:

  • $env:ProgramFiles\PowerShell\6\ для стабильной установки версии 6.x;$env:ProgramFiles\PowerShell\6\ for the stable installation of 6.x
  • $env:ProgramFiles\PowerShell\6-preview\ для установки предварительной версии 6.x.$env:ProgramFiles\PowerShell\6-preview\ for the preview installation of 6.x

Это изменение гарантирует, что PowerShell Core можно обновлять и обслуживать с помощью Центра обновления Майкрософт.This change ensures that PowerShell Core can be updated/serviced by Microsoft Update.

Дополнительные сведения см. в PowerShell RFC0026.For more information, check out PowerShell RFC0026.

Данные телеметрии можно отключить только с помощью переменной средыTelemetry can only be disabled with an environment variable

PowerShell Core отправляет основные данные телеметрии в корпорацию Майкрософт при запуске.PowerShell Core sends basic telemetry data to Microsoft when it is launched. В эти данные входят имя ОС, версия ОС и версия PowerShell.The data includes the OS name, OS version, and PowerShell version. Они позволяют нам лучше понимать среды, где используется PowerShell, а также приоритизировать новые функции и исправления.This data allows us to better understand the environments where PowerShell is used and enables us to prioritize new features and fixes.

Чтобы отказаться от использования данных телеметрии, задайте для переменной среды POWERSHELL_TELEMETRY_OPTOUT значение true, yes или 1.To opt-out of this telemetry, set the environment variable POWERSHELL_TELEMETRY_OPTOUT to true, yes, or 1. Мы больше не поддерживаем удаление файла DELETE_ME_TO_DISABLE_CONSOLEHOST_TELEMETRY для отключения телеметрии.We no longer support deletion of the file DELETE_ME_TO_DISABLE_CONSOLEHOST_TELEMETRY to disable telemetry.

В системе удаленного взаимодействия PowerShell на платформах Unix запрещена обычная проверка подлинности по протоколу HTTPDisallowed Basic Auth over HTTP in PowerShell Remoting on Unix platforms

Чтобы исключить использование незашифрованного трафика, теперь для удаленного взаимодействия PowerShell на платформах Unix требуется использование NTLM или Negotiate либо HTTPS.To prevent the use of unencrypted traffic, PowerShell Remoting on Unix platforms now requires usage of NTLM/Negotiate or HTTPS.

Дополнительные сведения об этих изменениях см. в статье Проблема № 6779.For more information on these changes, check out Issue #6779.

Удален VisualBasic как поддерживаемый язык в Add-TypeRemoved VisualBasic as a supported language in Add-Type

Раньше для компиляции кода Visual Basic использовался командлет Add-Type.In the past, you could compile Visual Basic code using the Add-Type cmdlet. Visual Basic редко использовался с Add-Type.Visual Basic was rarely used with Add-Type. Мы удалили эту функцию, чтобы уменьшить размер PowerShell.We removed this feature to reduce the size of PowerShell.

Отменено использование CommandTypes.Workflow и WorkflowInfoCleanedCleaned up uses of CommandTypes.Workflow and WorkflowInfoCleaned

Дополнительные сведения об этих изменениях см. в статье PR #6708.For more information on these changes, check out PR #6708.