Novedades de PowerShell Core 6.1What's New in PowerShell Core 6.1

Esta es una selección de algunas de las principales características nuevas y los cambios que se han incorporado en 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.

También hay toneladas de "cosas aburridas" que hacen que PowerShell sea más rápido y más estable (además de montones y montones de correcciones de errores).There's also tons of "boring stuff" that make PowerShell faster and more stable (plus lots and lots of bug fixes)! Si quiere ver una lista completa de los cambios, eche un vistazo a nuestro registro de cambios en GitHub.For a full list of changes, check out our changelog on GitHub.

Y aunque destacamos algunos nombres al final, queremos dar las gracias a todos los colaboradores de la comunidad que han hecho posible esta versión.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 cambió a .NET Core 2.1 después de su lanzamiento en mayo, lo que dio lugar a muchas mejoras en PowerShell, incluidas: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:

paquete de compatibilidad de Windows para .NET CoreWindows Compatibility Pack for .NET Core

En Windows, el equipo de .NET incluyó paquete de compatibilidad de Windows para .NET Core, un conjunto de ensamblados que agregan varias API que se quitaron a .NET Core en 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.

Hemos agregado el paquete de compatibilidad de Windows a la versión PowerShell Core 6.1 para que los módulos o scripts que usen estas API puedan tener la seguridad de que estarán disponibles.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.

El paquete de compatibilidad de Windows permite que PowerShell Core use más de 1900 cmdlets que se incluyen con la actualización de Windows 10 de octubre de 2018 y 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.

Compatibilidad con la lista blanca de aplicacionesSupport for Application Whitelisting

PowerShell Core 6.1 incluye paridad con Windows PowerShell 5.1 al ser compatible con la lista blanca de aplicaciones AppLocker y Device Guard.PowerShell Core 6.1 has parity with Windows PowerShell 5.1 supporting AppLocker and Device Guard application whitelisting. La creación de listas blancas de aplicaciones permite un control granular de qué archivos binarios se pueden ejecutar mediante el modo de lenguaje restringido de PowerShell.Application whitelisting allows granular control of what binaries are allowed to be executed used with PowerShell Constrained Language mode.

Mejoras en el rendimientoPerformance improvements

En PowerShell Core 6.0 se realizaron algunas mejoras de rendimiento significativas.PowerShell Core 6.0 made some significant performance improvements. PowerShell Core 6.1 sigue mejorando la velocidad de determinadas operaciones.PowerShell Core 6.1 continues to improve the speed of certain operations.

Por ejemplo, Group-Object se ha agilizado en un 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
Tiempo (s)Time (sec) 25,17825.178 19,65319.653 6,6416.641
Aceleración (%)Speed-up (%) N/AN/A 21,9 %21.9% 66,2 %66.2%

De forma similar, escenarios de ordenación como este han mejorado en más del 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
Tiempo (s)Time (sec) 12,17012.170 8,4938.493 7,087.08
Aceleración (%)Speed-up (%) N/AN/A 30,2 %30.2% 16,6 %16.6%

Import-Csv también se han agilizado mucho después de una regresión desde Windows PowerShell.Import-Csv has also been sped up significantly after a regression from Windows PowerShell. En este ejemplo se usa un CSV de prueba con 26 616 filas y 6 columnas: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
Tiempo (s)Time (sec) 0,4410.441 1,0691.069 0,2680.268
Aceleración (%)Speed-up (%) N/AN/A -142,4 %-142.4% 74,9 % (39,2 % desde WPS)74.9% (39.2% from WPS)

Por último, la conversión de JSON en PSObject se ha agilizado en más del 50 % desde Windows PowerShell.Lastly, conversion from JSON into PSObject has been sped up by more than 50% since Windows PowerShell. El ejemplo siguiente usa un archivo JSON de prueba de unos 2 MB: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
Tiempo (s)Time (sec) 0,2590.259 0,5770.577 0,1250.125
Aceleración (%)Speed-up (%) N/AN/A -122,8%-122.8% 78,3 % (51,7 % desde WPS)78.3% (51.7% from WPS)

Comprobar system32 para los módulos integrados compatibles en WindowsCheck system32 for compatible in-box modules on Windows

En la actualización de Windows 10 1809 y Windows Server 2019, actualizamos una serie de módulos de PowerShell integrados para marcarlos como compatibles con 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.

Cuando se inicie PowerShell Core 6.1, incluirá automáticamente $windir\System32 como parte de la variable de entorno PSModulePath.When PowerShell Core 6.1 starts up, it will automatically include $windir\System32 as part of the PSModulePath environment variable. Pero solo expone módulos a Get-Module y Import-Module si su CompatiblePSEdition está marcado como compatible con Core.However, it only exposes modules to Get-Module and Import-Module if its CompatiblePSEdition is marked as compatible with Core.

Get-Module -ListAvailable

Nota

Puede que vea otros módulos disponibles, en función de qué roles y características estén instaladas.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...
...

Puede invalidar este comportamiento para que se muestren todos los módulos mediante el parámetro de modificador -SkipEditionCheck.You can override this behavior to show all modules using the -SkipEditionCheck switch parameter. También hemos agregado una propiedad PSEdition a la salida de la tabla.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...

Para más información sobre este comportamiento, eche un vistazo a PowerShell RFC0025.For more information about this behavior, check out PowerShell RFC0025.

Representación y cmdlets de MarkdownMarkdown cmdlets and rendering

Markdown es un estándar para crear documentos de texto simple legible con el formato básico que se puede representar en HTML.Markdown is a standard for creating readable plaintext documents with basic formatting that can be rendered into HTML.

Hemos agregado algunos cmdlets en 6.1 que permiten convertir y representar documentos de Markdown en la consola, incluidos: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

Por ejemplo, Show-Markdown representa un archivo de Markdown en la consola:For example, Show-Markdown renders a Markdown file in the console:

Ejemplo donde se muestra Markdown

Para más información sobre cómo funcionan estos cmdlets, vea este RFC.For more information about how these cmdlets work, check out this RFC.

Marcas de características experimentalesExperimental feature flags

Ya habíamos habilitado la compatibilidad con las características experimentales.We enabled support for Experimental Features. Esto permite a los desarrolladores de PowerShell ofrecer nuevas características y obtener comentarios antes de completar el diseño.This allows PowerShell developers to deliver new features and get feedback before the design is complete. De este modo, evitamos realizar cambios importantes a medida que evoluciona el diseño.This way we avoid making breaking changes as the design evolves.

Use Get-ExperimentalFeature para obtener una lista de las características experimentales disponibles.Use Get-ExperimentalFeature to get a list of available experimental features. Puede habilitar o deshabilitar estas características con Enable-ExperimentalFeature y Disable-ExperimentalFeature.You can enable or disable these features with Enable-ExperimentalFeature and Disable-ExperimentalFeature.

Puede saber más sobre esta característica en PowerShell RFC0029.You can learn more about this feature in PowerShell RFC0029.

Mejoras de cmdlets de webWeb cmdlet improvements

Gracias a @markekraus, se ha realizado una gran cantidad de mejoras en nuestros cmdlets de web: Invoke-WebRequestThanks to @markekraus, a whole slew of improvements have been made to our web cmdlets: Invoke-WebRequest y Invoke-RestMethod.and Invoke-RestMethod.

  • PR #6109 - codificación predeterminada establecida en UTF-8 para respuestas application-json predeterminadasPR #6109 - default encoding set to UTF-8 for application-json responses
  • PR #6018 - parámetro -SkipHeaderValidation para permitir encabezados Content-Type que no son compatibles con el estándarPR #6018 - -SkipHeaderValidation parameter to allow Content-Type headers that aren't standards-compliant
  • PR #5972 - parámetro Form para admitir compatibilidad con multipart/form-data simplificadaPR #5972 - Form parameter to support simplified multipart/form-data support
  • PR #6338 - control compatible que distingue entre mayúsculas y minúsculas de las claves de la relaciónPR #6338 - Compliant, case-insensitive handling of relation keys
  • PR #6447 - adición del parámetro -Resume para cmdlets de webPR #6447 - Add -Resume parameter for web cmdlets

Mejoras de comunicación remotaRemoting improvements

PowerShell Direct para contenedores intenta usar primero PowerShell CorePowerShell Direct for Containers tries to use PowerShell Core first

PowerShell Direct es una característica de PowerShell e Hyper-V que permite conectarse a una máquina virtual de Hyper-V o un contenedor sin conectividad de red u otros servicios de administración remota.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.

Antes, PowerShell Direct se conectaba mediante la instancia de Windows PowerShell integrada en el contenedor.In the past, PowerShell Direct connected using the inbox Windows PowerShell instance on the Container. Ahora, PowerShell Direct intenta primero conectarse usando cualquier pwsh.exe disponible en la variable de entorno PATH.Now, PowerShell Direct first attempts to connect using any available pwsh.exe on the PATH environment variable. Si pwsh.exe no está disponible, PowerShell Direct recurre a usar powershell.exe.If pwsh.exe isn't available, PowerShell Direct falls back to use powershell.exe.

Enable-PSRemoting ahora crea puntos de conexión de comunicación remota independientes para versiones preliminaresEnable-PSRemoting now creates separate remoting endpoints for preview versions

Enable-PSRemoting ahora crea dos configuraciones de sesión de comunicación remota:Enable-PSRemoting now creates two remoting session configurations:

  • Una para la versión principal de PowerShell.One for the major version of PowerShell. Por ejemplo, PowerShell.6.For example, PowerShell.6. Este punto de conexión en el que se puede confiar en todas las actualizaciones de versiones secundarias como la configuración de sesión de PowerShell 6 "para todo el sistema".This endpoint that can be relied upon across minor version updates as the "system-wide" PowerShell 6 session configuration
  • Una configuración de sesión específica de la versión, por ejemplo: PowerShell.6.1.0One version-specific session configuration, for example: PowerShell.6.1.0

Este comportamiento es útil si quiere tener varias versiones de PowerShell 6 instaladas y accesibles en la misma máquina.This behavior is useful if you want to have multiple PowerShell 6 versions installed and accessible on the same machine.

Además, las versiones preliminares de PowerShell ahora obtienen sus propias configuraciones de sesión de comunicación remota después de ejecutar el cmdlet 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

El resultado puede ser diferente si no ha configurado WinRM antes.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.

Después puede ver las configuraciones de sesión de PowerShell independientes para la versión preliminar y compilaciones estables de PowerShell 6, para cada versión específica.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

Sintaxis user@host:port para SSHuser@host:port syntax supported for SSH

Los clientes SSH suelen admitir una cadena de conexión en el formato user@host:port.SSH clients typically support a connection string in the format user@host:port. Al agregar SSH como protocolo para la comunicación remota de PowerShell, se ha agregado compatibilidad con este formato de cadena de conexión: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

Opción de MSI para agregar el menú contextual del shell del Explorador en WindowsMSI option to add explorer shell context menu on Windows

Gracias a @bergmeister, ya puede habilitar un menú contextual en Windows.Thanks to @bergmeister, now you can enable a context menu on Windows. Ahora puede abrir la instalación de todo el sistema de PowerShell 6.1 desde cualquier carpeta en el Explorador de Windows:Now you can open your system-wide installation of PowerShell 6.1 from any folder in the Windows Explorer:

Menú contextual del shell para PowerShell 6

ExtrasGoodies

"Ejecutar como administrador" en la lista de accesos directos de Windows"Run as Administrator" in the Windows shortcut jump list

Gracias a @bergmeister, la lista de accesos directos de PowerShell Core incluye ahora "Ejecutar como administrador":Thanks to @bergmeister, the PowerShell Core shortcut's jump list now includes "Run as Administrator":

Ejecutar como administrador en la lista de accesos directos de PowerShell 6

cd - vuelve al directorio anteriorcd - returns to previous directory

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

O en Linux:Or on Linux:

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

Además, cd y cd -- cambian a $HOME.Also, cd and cd -- change to $HOME.

Test-Connection

Gracias a @iSazonov, el cmdlet Test-Connection se ha trasladado a PowerShell Core.Thanks to @iSazonov, the Test-Connection cmdlet has been ported to PowerShell Core.

Update-Help como no administradorUpdate-Help as non-admin

Por petición popular, Update-Help ya no debe ejecutarse como administrador.By popular demand, Update-Help no longer needs to be run as an administrator. Update-Help ahora tiene como valor predeterminado guardar la Ayuda en una carpeta con ámbito de usuario.Update-Help now defaults to saving help to a user-scoped folder.

Nuevos métodos y propiedades en PSCustomObjectNew methods/properties on PSCustomObject

Gracias a @iSazonov, hemos agregado nuevos métodos y propiedades a PSCustomObject.Thanks to @iSazonov, we've added new methods and properties to PSCustomObject. PSCustomObject ahora incluye una propiedad Count/Length como otros objetos.PSCustomObject now includes a Count/Length property like other objects.

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

$PSCustomObject.Length
1
$PSCustomObject.Count
1

Este trabajo también incluye los métodos ForEach y Where que permiten operar y filtrar en elementos 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

Gracias a @SimonWahlin, hemos agregado el parámetro -Not a Where-Object.Thanks to @SimonWahlin, we've added the -Not parameter to Where-Object. Ahora puede filtrar un objeto en la canalización para la no existencia de una propiedad o un valor de propiedad nula o vacía.Now you can filter an object at the pipeline for the non-existence of a property, or a null/empty property value.

Por ejemplo, este comando devuelve todos los servicios que no tienen los servicios dependientes definidos:For example, this command returns all services that don't have any dependent services defined:

Get-Service | Where-Object -Not DependentServices

New-ModuleManifest crea un documento UTF-8 sin marca BOMNew-ModuleManifest creates a BOM-less UTF-8 document

Debido a nuestro cambio a UTF-8 sin marca BOM en PowerShell 6.0, hemos actualizado el cmdlet New-ModuleManifest para crear un documento UTF-8 sin marca BOM en lugar de uno UTF-16.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.

Conversiones de PSMethod a delegadoConversions from PSMethod to Delegate

Gracias a @powercode, ahora se admite la conversión de un PSMethod a un delegado.Thanks to @powercode, we now support the conversion of a PSMethod into a delegate. Esto permite hacer cosas como pasar PSMethod [M]::DoubleStrLen como un valor de delegado en [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)

Para más información sobre este cambio, eche un vistazo a PR #5287.For more info on this change, check out PR #5287.

Desviación estándar en Measure-ObjectStandard deviation in Measure-Object

Gracias a @CloudyDino, hemos agregado una propiedad StandardDeviation a 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

Gracias a @maybe-hello-world, Get-PfxCertificate tiene ahora el parámetro Password, que toma SecureString.Thanks to @maybe-hello-world, Get-PfxCertificate now has the Password parameter, which takes a SecureString. Esto permite usarlo de forma no interactiva: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

Eliminación de la función moreRemoval of the more function

Antes, PowerShell incluía una función en Windows llamada more que encapsulaba more.com.In the past, PowerShell shipped a function on Windows called more that wrapped more.com. Se ha quitado esa función.That function has now been removed.

Además, se ha cambiado la función help para usar more.com en Windows o el elemento de paginación del sistema predeterminado especificado por $env:PAGER en plataformas que no sean 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: ahora devuelve a los usuarios al directorio de trabajo actual en esa unidadcd DriveName: now returns users to the current working directory in that drive

Antes, al usar Set-Location o cd para volver a un PSDrive enviaba a los usuarios a la ubicación predeterminada para esa unidad.Previously, using Set-Location or cd to return to a PSDrive sent users to the default location for that drive.

Gracias a @mcbobke, ahora se envía a los usuarios al último directorio de trabajo actual conocido para esa sesión.Thanks to @mcbobke, users are now sent to the last known current working directory for that session.

Aceleradores de tipo de Windows PowerShellWindows PowerShell type accelerators

En Windows PowerShell, hemos incluido estos aceleradores de tipo para que sea más fácil trabajar con sus tipos respectivos: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

Estos aceleradores de tipo no se incluían en PowerShell 6, pero se han agregado a PowerShell 6.1 que se ejecuta en Windows.These type accelerators were not included in PowerShell 6, but have been added to PowerShell 6.1 running on Windows.

Estos tipos son útiles para crear fácilmente objetos de AD y WMI.These types are useful in easily constructing AD and WMI objects.

Por ejemplo, puede consultar mediante LDAP:For example, you can query using LDAP:

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

En este ejemplo se crea un objeto CIM de 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

En este ejemplo se devuelve un objeto ManagementClass para la clase 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...}

Alias -lp para todos los parámetros -LiteralPath-lp alias for all -LiteralPath parameters

Gracias a @kvprasoon, ahora tenemos un alias de parámetro -lp para todos los cmdlets de PowerShell integrados que tienen un parámetro -LiteralPath.Thanks to @kvprasoon, we now have a parameter alias -lp for all the built-in PowerShell cmdlets that have a -LiteralPath parameter.

Cambios importantesBreaking Changes

Rutas de acceso de instalación basadas en MSI en WindowsMSI-based installation paths on Windows

En Windows, el paquete MSI ahora instala esta ruta de acceso:On Windows, the MSI package now installs to the following path:

  • $env:ProgramFiles\PowerShell\6\ para la instalación estable de 6.x$env:ProgramFiles\PowerShell\6\ for the stable installation of 6.x
  • $env:ProgramFiles\PowerShell\6-preview\ para la instalación de versión preliminar de 6.x$env:ProgramFiles\PowerShell\6-preview\ for the preview installation of 6.x

Este cambio garantiza que PowerShell Core se pueda actualizar o mantener a través de Microsoft Update.This change ensures that PowerShell Core can be updated/serviced by Microsoft Update.

Para más información, vea PowerShell RFC0026.For more information, check out PowerShell RFC0026.

Solo se puede deshabilitar la telemetría con una variable de entornoTelemetry can only be disabled with an environment variable

PowerShell Core envía datos de telemetría básica a Microsoft cuando se inicia.PowerShell Core sends basic telemetry data to Microsoft when it is launched. Los datos incluyen el nombre del sistema operativo, la versión del sistema operativo y la versión de PowerShell.The data includes the OS name, OS version, and PowerShell version. Estos datos nos permiten comprender mejor los entornos donde se usa PowerShell y nos permite dar prioridad a nuevas características y correcciones.This data allows us to better understand the environments where PowerShell is used and enables us to prioritize new features and fixes.

Para dejar de participar en esta telemetría, establezca la variable de entorno POWERSHELL_TELEMETRY_OPTOUT en true, yes o 1.To opt-out of this telemetry, set the environment variable POWERSHELL_TELEMETRY_OPTOUT to true, yes, or 1. Ya no se admite la eliminación del archivo DELETE_ME_TO_DISABLE_CONSOLEHOST_TELEMETRY para deshabilitar la telemetría.We no longer support deletion of the file DELETE_ME_TO_DISABLE_CONSOLEHOST_TELEMETRY to disable telemetry.

No permite la autenticación básica a través de HTTP de comunicación remota de PowerShell en plataformas UnixDisallowed Basic Auth over HTTP in PowerShell Remoting on Unix platforms

Para evitar el uso de tráfico sin cifrar, ahora es necesario usar NTLM/Negotiate o HTTPS para la comunicación remota de PowerShell en plataformas Unix.To prevent the use of unencrypted traffic, PowerShell Remoting on Unix platforms now requires usage of NTLM/Negotiate or HTTPS.

Para obtener más información sobre estos cambios, consulte PR #6779.For more information on these changes, check out Issue #6779.

Se quitó VisualBasic como lenguaje compatible en Add-TypeRemoved VisualBasic as a supported language in Add-Type

Antes, se podía compilar código de Visual Basic mediante el cmdlet Add-Type.In the past, you could compile Visual Basic code using the Add-Type cmdlet. Visual Basic se usó rara vez con Add-Type.Visual Basic was rarely used with Add-Type. Hemos quitado esta característica para reducir el tamaño de PowerShell.We removed this feature to reduce the size of PowerShell.

Se limpiaron los usos de CommandTypes.Workflow y WorkflowInfoCleanedCleaned up uses of CommandTypes.Workflow and WorkflowInfoCleaned

Para más información sobre estos cambios, eche un vistazo a PR #6708.For more information on these changes, check out PR #6708.

Ahora, Group-Object ordena los gruposGroup-Object now sorts the groups

Como parte de la mejora del rendimiento, Group-Object ahora devuelve una lista ordenada de los grupos.As part of the performance improvement, Group-Object now returns a sorted listing of the groups. Aunque no debe confiar en el orden, podría verse interrumpida por este cambio si quisiera el primer grupo.Although you should not rely on the order, you could be broken by this change if you wanted the first group. Decidimos que esta mejora en el rendimiento valía la pena el cambio, ya que el impacto de depender del comportamiento previo es bajo.We decided that this performance improvement was worth the change since the impact of being dependent on previous behavior is low.

Para más información sobre este cambio, consulte el problema #7409.For more information on this change, see Issue #7409.