Oplossingen voor problemen in WMF 5.1#Bug Fixes in WMF 5.1#

Oplossingen voor problemenBug fixes

De volgende opmerkelijke fouten zijn verholpen in WMF 5.1:The following notable bugs are fixed in WMF 5.1:

Automatische detectie van module respecteert volledig $env:PSModulePathModule auto-discovery fully honors $env:PSModulePath

Module auto-discovery (modules laden zonder een expliciete Import-Module bij het aanroepen van een opdracht automatisch) is geïntroduceerd in WMF 3.Module auto-discovery (loading modules automatically without an explicit Import-Module when calling a command) was introduced in WMF 3. Wanneer geïntroduceerd, PowerShell gecontroleerd voor opdrachten in $PSHome\Modules voordat u $env:PSModulePath.When introduced, PowerShell checked for commands in $PSHome\Modules before using $env:PSModulePath.

Dit gedrag te houden van WMF 5.1 gewijzigd $env:PSModulePath volledig.WMF 5.1 changes this behavior to honor $env:PSModulePath completely. Hiermee kunt u een door de gebruiker opgestelde module die wordt gedefinieerd door PowerShell-opdrachten (bijvoorbeeld Get-ChildItem) automatisch geladen en de ingebouwde opdracht correct te overschrijven.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.

Omleiding van bestand geen langer harde-codes -Encoding UnicodeFile redirection no longer hard-codes -Encoding Unicode

In alle eerdere versies van PowerShell is het onmogelijk om te bepalen de bestandscodering gebruikt door de omleidingsoperator van bestand bijvoorbeeld Get-ChildItem > out.txt omdat PowerShell toegevoegd -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.

Beginnen met WMF 5.1, kunt u nu wijzigen de bestandscodering van omleiding door in te stellen $PSDefaultParameterValues:Starting with WMF 5.1, you can now change the file encoding of redirection by setting $PSDefaultParameterValues:

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

Een regressie bij het openen van de leden van vast System.Reflection.TypeInfoFixed a regression in accessing members of System.Reflection.TypeInfo

Een regressie geïntroduceerd in WMF 5.0 heeft toegang tot leden van System.Reflection.RuntimeType, bijvoorbeeld [int].ImplementedInterfaces.A regression introduced in WMF 5.0 broke accessing members of System.Reflection.RuntimeType, e.g. [int].ImplementedInterfaces. Deze fout is verholpen in WMF 5.1.This bug has been fixed in WMF 5.1.

Sommige problemen opgelost met COM-objectenFixed some issues with COM objects

WMF 5.0 geïntroduceerd om een nieuw COM-binder voor aanroepen methoden op COM-objecten en toegang tot eigenschappen van de COM-objecten.WMF 5.0 introduced a new COM binder for invoking methods on COM objects and accessing properties of COM objects. Deze nieuwe binder prestaties aanzienlijk verbeterd, maar ook een aantal fouten die zijn vastgesteld in WMF 5.1 geïntroduceerd.This new binder improved performance significantly but also introduced some bugs which have been fixed in WMF 5.1.

Argument conversies zijn niet altijd correct worden uitgevoerdArgument conversions were not always performed correctly

In het volgende voorbeeld:In the following example:

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

De methode SendKeys verwacht een tekenreeks, maar PowerShell is niet geconverteerd de char naar een tekenreeks uitstellende geconverteerd naar een IDispatch::Invoke die VariantChangeType worden gebruikt voor de conversie, wat in dit voorbeeld leidde tot de sleutels '1', '7' en '3' in plaats daarvan verzenden van de verwachte Volume.Mute-sleutel.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.

Inventariseerbare COM-objecten die niet altijd correct wordt afgehandeldEnumerable COM objects not always handled correctly

Normaal gesproken inventariseren meeste inventariseerbare objecten PowerShell, maar een regressie geïntroduceerd in WMF 5.0 voorkomen dat de opsomming van COM-objecten die als IEnumerable is geïmplementeerd.PowerShell normally enumerates most enumerable objects, but a regression introduced in WMF 5.0 prevented the enumeration of COM objects that implement IEnumerable. Bijvoorbeeld:For example:

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

$x = Get-COMDictionary

In het bovenstaande voorbeeld geschreven WMF 5.0 onjuist de Scripting.Dictionary aan de pijplijn in plaats van het inventariseren van de sleutel/waarde-paren.In the above example, WMF 5.0 incorrectly wrote the Scripting.Dictionary to the pipeline instead of enumerating the key/value pairs.

Dit wijzigen adressen uitgeven 1752224 op verbinding makenThis change also addresses issue 1752224 on Connect

[ordered] is niet toegestaan in klassen[ordered] was not allowed inside classes

WMF 5.0 geïntroduceerd klassen met de validatie van het type letterlijke waarden in klassen gebruikt.WMF 5.0 introduced classes with validation of type literals used in classes. [ordered] ziet eruit als een letterlijke waarde van het type, maar is niet een waar .NET-type.[ordered] looks like a type literal but is not a true .NET type. WMF 5.0 onjuist heeft een fout gerapporteerd op [ordered] binnen een klasse:WMF 5.0 incorrectly reported an error on [ordered] inside a class:

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

Help-informatie op over onderwerpen met meerdere versies werkt nietHelp on About topics with multiple versions does not work

Voordat u WMF 5.1, als u meerdere versies van een module geïnstalleerd had en ze allemaal een help-onderwerp bijvoorbeeld gedeeld about_PSReadline, help about_PSReadline meerdere onderwerpen met geen duidelijke manier waarmee u de echte help zou retourneren.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.

WMF 5.1 corrigeert dit door te retourneren van de help voor de nieuwste versie van het onderwerp.WMF 5.1 fixes this by returning the help for the latest version of the topic.

Get-Help biedt geen manier om op te geven welke versie u hulp wilt.Get-Help does not provide a way to specify which version you want help for. Om dit te voorkomen, navigeer naar de map modules en de hulp rechtstreeks met een hulpprogramma zoals uw favoriete editor weergeven.To work around this, navigate to the modules directory and view the help directly with a tool like your favorite editor.

lezen van STDIN PowerShell.exe werkt nietpowershell.exe reading from STDIN stopped working

Klanten gebruiken powershell -command - van systeemeigen apps uit te voeren PowerShell doorgeeft in het script via STDIN helaas dit is verbroken vanwege een andere wijzigingen van de console-host.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 maakt piek in CPU-gebruik bij het opstartenpowershell.exe creates spike in CPU usage on startup

PowerShell maakt gebruik van een WMI-query om te controleren of het via Groepsbeleid om te voorkomen dat de vertraging veroorzaakt in de aanmelding is gestart.PowerShell uses a WMI query to check if it was started via Group Policy to avoid causing delay in login. De WMI-query belandt tzres.mui.dll injecteren in elk proces op het systeem omdat de Win32_Process WMI-klasse probeert op te halen van de lokale tijdzone-informatie.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. Dit resulteert in een grote CPU piek in de wmiprvse (de WMI-provider host).This results in a large CPU spike in wmiprvse (the WMI provider host). FIX is het gebruik van Win32-API-aanroepen dezelfde informatie in plaats van WMI ophalen.Fix is to use Win32 API calls to get the same information instead of using WMI.