seleccionar elementos distintos de una columna en powershell
distinct-values (4)
¿Has intentado algo como ésto?
get-command | select ModuleName | sort-object -Property ModuleName -Unique
Si publico el siguiente comando en PowerShell, recupero muchas filas.
PS C:/Users/benh> get-command
CommandType Name ModuleName Definition
----------- ---- ---------- ----------
Cmdlet Get-Variable Microsoft.PowerShell.Utility Get-Variable...
Cmdlet Get-WebAppDomain WebAdministration Get-WebAppDomain...
Cmdlet Get-WebApplication WebAdministration Get-WebApplication...
Cmdlet Get-WebAppPoolState WebAdministration Get-WebAppPoolState...
...
Cmdlet Get-WinEvent Microsoft.PowerShell.Diagnostics Get-WinEvent...
Cmdlet Get-WmiObject Microsoft.PowerShell.Management Get-WmiObject...
Cmdlet Get-WSManCredSSP Microsoft.WSMan.Management Get-WSManCredSSP...
Cmdlet Get-WSManInstance Microsoft.WSMan.Management Get-WSManInstance...
Cmdlet Group-Object Microsoft.PowerShell.Utility Group-Object...
Cmdlet Import-Alias Microsoft.PowerShell.Utility Import-Alias...
Cmdlet Import-Clixml Microsoft.PowerShell.Utility Import-Clixml...
Cmdlet Import-Counter Microsoft.PowerShell.Diagnostics Import-Counter...
Cmdlet Import-Csv Microsoft.PowerShell.Utility Import-Csv...
Cmdlet Import-LocalizedData Microsoft.PowerShell.Utility Import-LocalizedData...
Cmdlet Import-Module Microsoft.PowerShell.Core ...
Lo que quiero hacer es obtener todos los ModuleNames distintos devueltos por Get-Command. ¿Cómo puedo hacer esto con PowerShell?
En pseudo-C #:
PowerShell.Exec("Get-Command").Select(a=> a.ModuleName).Distinct();
¡Gracias por adelantado!
Debajo de 2 comandos se obtendrá el mismo resultado, pero el primero será ordenado y un poco caro en tiempo de ejecución.
El tiempo de ejecución se tendrá más en cuenta cuando tenga una gran cantidad de elementos, por ejemplo, si está importando un archivo csv
de 30,000 filas. Luego, la segunda opción será más rápida, y una vez que obtenga valores únicos, ordénelos si lo necesita porque aquí la clasificación se realizará en un número de elementos mucho menor, por lo tanto, tendrá un mejor rendimiento.
1.
get-command | select ModuleName | sort-object -Property ModuleName -Unique
# This will give you the execution time
Measure-Command {get-command | select ModuleName | sort-object -Property ModuleName -Unique}
2.
get-command | select ModuleName -Unique
# This will give you the execution time
Measure-Command {get-command | select ModuleName -Unique}
Incluso más corto:
get-command | select-object moduleName -unique
Otra opción:
Get-Command | Group-Object ModuleName -NoElement | Select-Object Name