item examples ejemplos childitem powershell directory get-childitem

examples - ¿Cómo escribir una función de PowerShell para obtener directorios?



powershell get file (3)

Utilizando PowerShell puedo obtener los directorios con el siguiente comando:

Get-ChildItem -Path $path -Include "obj" -Recurse | ` Where-Object { $_.PSIsContainer }

Preferiría escribir una función para que el comando sea más legible. Por ejemplo:

Get-Directories -Path "Projects" -Include "obj" -Recurse

Y la siguiente función hace exactamente eso, excepto para el manejo: -Recurse elegante:

Function Get-Directories([string] $path, [string] $include, [boolean] $recurse) { if ($recurse) { Get-ChildItem -Path $path -Include $include -Recurse | ` Where-Object { $_.PSIsContainer } } else { Get-ChildItem -Path $path -Include $include | ` Where-Object { $_.PSIsContainer } } }

¿Cómo puedo eliminar la declaración if de mi función Get-Directories o es esta una mejor manera de hacerlo?


La respuesta que Oisin da es acertada. Solo quería agregar que esto está cerca de querer ser una función proxy. Si tiene instalado PowerShell Community Extensions 2.0, ya tiene esta función de proxy. Tienes que habilitarlo (está deshabilitado por defecto). Simplemente edite el archivo Pscx.UserPreferences.ps1 y cambie esta línea para que se establezca en $ true como se muestra a continuación:

GetChildItem = $true # Adds ContainerOnly and LeafOnly parameters # but doesn''t handle dynamic params yet.

Tenga en cuenta la limitación con respecto a los parámetros dinámicos. Ahora cuando importas PSCX hazlo así:

Import-Module Pscx -Arg [path to Pscx.UserPreferences.ps1]

Ahora puedes hacer esto:

Get-ChildItem . -r Bin -ContainerOnly


Prueba esto:

# nouns should be singular unless results are guaranteed to be plural. # arguments have been changed to match cmdlet parameter types Function Get-Directory([string[]]$path, [string[]]$include, [switch]$recurse) { Get-ChildItem -Path $path -Include $include -Recurse:$recurse | ` Where-Object { $_.PSIsContainer } }

Esto funciona porque -Recurse: $ false es lo mismo que no tener -Recurse en absoluto.


En PowerShell 3.0, está horneado con los modificadores -File -Directory :

dir -Directory #List only directories dir -File #List only files