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é?
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.
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'})
ENCONTRADO :) Compruebe Get-member. Es una matriz de retorno.
Preguntas relacionadas
Nuevas preguntas
powershell
PowerShell es una línea de comandos multiplataforma y una utilidad de secuencias de comandos de Microsoft. Use esta etiqueta para preguntas sobre cómo escribir y ejecutar scripts de PowerShell SOLAMENTE. Las preguntas de programación específicas de la versión multiplataforma PowerShell Core (Windows, macOS y Linux) deben etiquetarse [powershell-core]. Se deben hacer preguntas sobre la administración del sistema en Super User o Server Fault.