2015-07-16 3 views
8

Il codice seguente funziona correttamente in PowerShell 4.0 e versioni precedenti. Se lo eseguo sulla versione 5.0.10240.16384 sull'ultima versione di Windows 10, i campi non vengono compilati nel nuovo oggetto ($ a). È un bug o qualcosa è cambiato?New-Object -Property Hashtable non popolando i campi nella versione 5.0 su Win 10

Add-Type @" 
    public struct TestUser { 
    public string First; 
    public string Last; 
} 
"@; 

$a = New-Object TestUser -Property @{ First = "Joe" 
           Last = "Smith"}; 

versione 4.0 e precedenti risultati:

$a.First -eq "Joe" 
$a.Last -eq "Smith" 

Versione 5,0

$a.First -eq $null 
$a.Last -eq $null 

Versione 5 Get-Member

TypeName: TestUser 

Name  MemberType Definition      
----  ---------- ----------      
Equals  Method  bool Equals(System.Object obj) 
GetHashCode Method  int GetHashCode()    
GetType  Method  type GetType()     
ToString Method  string ToString()    
First  Property string First {get;set;}  
Last  Property string Last {get;set;}  

EDIT: 012.Ho presentato un bug relativo a Microsoft in base al fatto che si tratta di una modifica irreversibile (se si tratta di una modifica) che avrà un impatto su molti script esistenti. Aggiornerò questa domanda se ci sono aggiornamenti su tale segnalazione. Sto ancora cercando feedback se qualcuno ha trovato qualcosa nella v5 che potrebbe suggerire che questo è il comportamento desiderato/modificato. Sono contento di provare altri test anche su v5 se qualcuno è curioso e non ha accesso a una macchina Win 10.

https://connect.microsoft.com/PowerShell/feedbackdetail/view/1552941/new-object-property-hashtable-not-populating-fields-in-version-5-0-on-win-10

+0

Nella v5 le proprietà esistono e sono nulle o le proprietà non sono state create. Essendo uguale a null non specifica quale sia il caso. Usa '$ a | gm' per verificare – Matt

+0

@ Matt I applogize per non essere chiaro su quello, $ a | Get-Member mostra che le proprietà esistono. I loro valori sono solo vuoti. Get-Member mostra il tipo corretto (TestUser) e tutte le proprietà e i metodi previsti. –

risposta

4

ho ottenuto la verifica da un membro del team di PowerShell che si tratta di un bug relativo a una chiamata mancante "Unbox". La soluzione per ora è usare una classe invece di una struct se possibile. È stato detto che la struttura fornisce pochi vantaggi in PowerShell, dato che PowerShell inserirà sempre una struttura.

+0

Confermato che questo è il caso. Grazie Keith per il seguito! –

+0

Come seguito, Microsoft ha corretto questo errore in PowerShell 5.0.10586. –