Correzioni di bug in WMF 5.1#Bug Fixes in WMF 5.1#

Correzioni di bugBug fixes

In WMF 5.1 sono stati corretti i bug importanti seguenti:The following notable bugs are fixed in WMF 5.1:

Rispetto completo del modulo auto-discovery $env:PSModulePathModule auto-discovery fully honors $env:PSModulePath

In WMF 3 è stato introdotto il modulo auto-discovery (caricamento automatico di moduli senza un'istanza esplicita di Import-Module quando si chiama un comando).Module auto-discovery (loading modules automatically without an explicit Import-Module when calling a command) was introduced in WMF 3. Quando è stata introdotta tale versione, PowerShell cercava i comandi in $PSHome\Modules prima di usare $env:PSModulePath.When introduced, PowerShell checked for commands in $PSHome\Modules before using $env:PSModulePath.

WMF 5.1 modifica questo comportamento per rispettare $env:PSModulePath completamente.WMF 5.1 changes this behavior to honor $env:PSModulePath completely. In questo modo, un modulo creato dall'utente che definisce i comandi di PowerShell (ad esempio Get-ChildItem) può essere caricato automaticamente e può sostituire correttamente il comando integrato.This allows for a user-authored module that defines commands provided by PowerShell (e.g. Get-ChildItem) to be auto-loaded and correctly overriding the built-in command.

Reindirizzamento del file non più come hardcoded -Encoding UnicodeFile redirection no longer hard-codes -Encoding Unicode

In tutte le versioni precedenti di PowerShell, non era possibile controllare la codifica del file usato dall'operatore di reindirizzamento di file, ad esempio Get-ChildItem > out.txt, perché PowerShell aveva aggiunto -Encoding Unicode.In all previous versions of PowerShell, it was impossible to control the file encoding used by the file redirection operator, e.g. Get-ChildItem > out.txt because PowerShell added -Encoding Unicode.

A partire da WMF 5.1, è ora possibile modificare la codifica del file di reindirizzamento impostando $PSDefaultParameterValues:Starting with WMF 5.1, you can now change the file encoding of redirection by setting $PSDefaultParameterValues:

$PSDefaultParameterValues["Out-File:Encoding"] = "Ascii"

Correzione di una regressione nell'accesso dei membri di System.Reflection.TypeInfoFixed a regression in accessing members of System.Reflection.TypeInfo

Una regressione introdotta in WMF 5.0 interrompeva l'accesso ai membri di System.Reflection.RuntimeType, ad esempio [int].ImplementedInterfaces.A regression introduced in WMF 5.0 broke accessing members of System.Reflection.RuntimeType, e.g. [int].ImplementedInterfaces. Questo bug è stato corretto in WMF 5.1.This bug has been fixed in WMF 5.1.

Risolti alcuni problemi con gli oggetti COMFixed some issues with COM objects

In WMF 5.0 è stato introdotto un nuovo strumento di associazione COM per richiamare metodi su oggetti COM e accedere alle proprietà degli oggetti COM.WMF 5.0 introduced a new COM binder for invoking methods on COM objects and accessing properties of COM objects. Questo nuovo strumento di associazione ha migliorato in modo significativo le prestazioni e ha inoltre introdotto alcuni bug che sono stati corretti in WMF 5.1.This new binder improved performance significantly but also introduced some bugs which have been fixed in WMF 5.1.

Le conversioni di argomenti non venivano sempre eseguite correttamenteArgument conversions were not always performed correctly

Nell'esempio seguente:In the following example:

$obj = New-Object -ComObject WScript.Shell
$obj.SendKeys([char]173)

Il metodo SendKeys prevede una stringa, ma PowerShell non converte il carattere in una stringa, rinviando la conversione a IDispatch::Invoke che usa VariantChangeType per eseguire la conversione. In questo esempio, ciò ha comportato l'invio di chiavi '1', '7' e '3' anziché la chiave Volume.Mute prevista.The SendKeys method expects a string, but PowerShell did not convert the char to a string, deferring the conversion to IDispatch::Invoke, which uses VariantChangeType to do the conversion, which in this example resulted in sending the keys '1', '7', and '3' instead of the expected Volume.Mute key.

Gli oggetti COM enumerabili non venivano sempre gestiti correttamenteEnumerable COM objects not always handled correctly

PowerShell in genere enumera la maggior parte degli oggetti enumerabili, ma una regressione introdotta in WMF 5.0 impediva l'enumerazione di oggetti COM che implementano IEnumerable.PowerShell normally enumerates most enumerable objects, but a regression introduced in WMF 5.0 prevented the enumeration of COM objects that implement IEnumerable. Ad esempio:For example:

function Get-COMDictionary
{
    $d = New-Object -ComObject Scripting.Dictionary
    $d.Add('a', 2)
    $d.Add('b', 2)
    return $d
}

$x = Get-COMDictionary

Nell'esempio precedente, WMF 5.0 ha scritto in modo errato Scripting.Dictionary nella pipeline anziché enumerare le coppie chiave-valore.In the above example, WMF 5.0 incorrectly wrote the Scripting.Dictionary to the pipeline instead of enumerating the key/value pairs.

Questa modifica riguarda anche i problemi 1752224 su ConnectThis change also addresses issue 1752224 on Connect

[ordered] non è consentito all'interno delle classi[ordered] was not allowed inside classes

In WMF 5.0 sono state introdotte classi con la convalida dei valori letterali di tipo per le classi.WMF 5.0 introduced classes with validation of type literals used in classes. [ordered] è simile a un valore letterale di tipo, ma non è un tipo .NET.[ordered] looks like a type literal but is not a true .NET type. WMF 5.0 restituiva erroneamente un errore relativo a [ordered] in una classe:WMF 5.0 incorrectly reported an error on [ordered] inside a class:

class CThing
{
    [object] foo($i)
    {
        [ordered]@{ Thing = $i }
    }
}

Supporto non funzionante sugli argomenti della Guida con più versioniHelp on About topics with multiple versions does not work

Prima di WMF 5.1, se erano installate più versioni di un modulo e tutte condividevano un argomento della Guida, ad esempio about_PSReadline, help about_PSReadline restituiva più argomenti e non era possibile visualizzare la Guida vera e propria.Before WMF 5.1, if you had multiple versions of a module installed and they all shared a help topic, for example, about_PSReadline, help about_PSReadline would return multiple topics with no obvious way to view the real help.

In WMF 5.1 il problema è stato risolto restituendo la Guida per la versione più recente dell'argomento.WMF 5.1 fixes this by returning the help for the latest version of the topic.

Get-Help non fornisce un modo per specificare la versione per la quale si vuole visualizzare la Guida.Get-Help does not provide a way to specify which version you want help for. Per risolvere il problema, passare alla directory dei moduli e visualizzare la Guida direttamente con uno strumento come il proprio editor preferito.To work around this, navigate to the modules directory and view the help directly with a tool like your favorite editor.

La lettura di PowerShell.exe da STDIN non funziona piùpowershell.exe reading from STDIN stopped working

I clienti usano powershell -command - da app native per eseguire PowerShell passandolo nello script tramite STDIN. Purtroppo questa funzionalità non è più disponibile a causa di altri modifiche nell'host della console.Customers use powershell -command - from native apps to execute PowerShell passing in the script via STDIN unfortunately this was broken due to other changes it the console host.

https://windowsserver.uservoice.com/forums/301869-powershell/suggestions/15854689-powershell-exe-command-is-broken-on-windows-10

PowerShell.exe crea picchi di utilizzo della CPU all'avviopowershell.exe creates spike in CPU usage on startup

PowerShell usa una query WMI per controllare se è stato avviato tramite Criteri di gruppo per evitare di causare ritardi nella fase di accesso.PowerShell uses a WMI query to check if it was started via Group Policy to avoid causing delay in login. Ne risulta che la query WMI inserisce tzres.mui.dll in ogni processo nel sistema, perché la classe WMI Win32_Process tenta di recuperare informazioni sul fuso orario locale.The WMI query ends up injecting tzres.mui.dll into every process on the system since the WMI Win32_Process class attempts to retrieve local timezone information. Ciò comporta un notevole picco di utilizzo della CPU in wmiprvse (host del provider WMI).This results in a large CPU spike in wmiprvse (the WMI provider host). La soluzione consiste nell'usare chiamate all'API Win32 per ottenere le stesse informazioni invece di usare WMI.Fix is to use Win32 API calls to get the same information instead of using WMI.