Pergunta

A utilização do PowerShell que eu posso começar a directórios com o seguinte comando:

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

Eu prefiro escrever uma função para que o comando é mais legível.Por exemplo:

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

E a seguinte função faz exatamente o que, exceto para o tratamento de -Recurse elegantemente:

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 }
    }
}

Como posso remover o if declaração do meu Obter-Diretórios função ou isso é uma maneira melhor de fazer isso?

Foi útil?

Solução

Tente isso:

# 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 } 
} 

Isso funciona porque -Recurse:$false é o mesmo, de não ter -Recurse em tudo.

Outras dicas

No PowerShell 3.0, que é cozido com -File -Directory opções:

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

A resposta Oisin dá está no local.Eu só queria acrescentar que este é um rodapé perto querendo ser uma função de proxy.Se você tem o Comunidade Do PowerShell Extensions 2.0 instalado, você já tem essa função de proxy.Você tem que habilitá-lo (ele está desativado por padrão).Basta editar o Pscx.UserPreferences.ps1 arquivo e altere esta linha para ele é definido como $true, como mostrado abaixo:

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

Nota a limitação a respeito de parâmetros dinâmicos.Agora, quando você importar PSCX fazê-lo assim:

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

Agora você pode fazer isso:

Get-ChildItem . -r Bin -ContainerOnly
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top