Por qué esto

Get-WinUserLanguageList | Where-Object LanguageTag -eq en-US

Devuelve una lista vacía (parece que no filtra los valores) pero esto

(Get-WinUserLanguageList) | Where-Object LanguageTag -eq en-US

¿funciona? Por lo general, no necesito () pero en este caso son obligatorios, pero ¿por qué?

2
Paul-AG 10 may. 2019 a las 18:04

3 respuestas

Get-WinUserLanguageList devuelve una matriz de objetos System.Generic.Collection.List. Esa lista subyacente es lo que necesita filtrar.

Al colocar el cmdlet entre paréntesis, se desenrolla la colección subyacente sin tener que iterar sobre cada índice de la matriz devuelta. La respuesta de mklement0 explica más sobre este comportamiento y por qué Get-WinUserLanguageList funciona de manera diferente a la mayoría de los otros cmdlets que devuelven colecciones.

2
Bender the Greatest 10 may. 2019 a las 15:57

Como se mencionó anteriormente, obtiene un objeto de lista y no el objeto WinUserLanguage que espera.

PS C:\Users\admin user> $test = Get-WinUserLanguageList

PS C:\Users\admin user> $test.GetType()

IsPublic IsSerial Name                                     BaseType                                                                                                                           
-------- -------- ----                                     --------                                                                                                                           
True     True     List`1                                   System.Object                                                                                                                      



PS C:\Users\admin user> $test[0].GetType()

IsPublic IsSerial Name                                     BaseType                                                                                                                           
-------- -------- ----                                     --------                                                                                                                           
True     False    WinUserLanguage                          System.Object                                                                                                                      

También podrías usar esto.

(Get-WinUserLanguageList).where({$_.LanguageTag -eq 'en-US'})
1
mklement0 10 may. 2019 a las 15:36

ENCONTRADO :) Compruebe Get-member. Es una matriz de retorno.

-2
Adam 10 may. 2019 a las 15:19