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.
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
@ 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. –