Frage

Mit PowerShell kann ich die Verzeichnisse mit dem folgenden Befehl abrufen:

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

Ich würde es vorziehen, eine Funktion zu schreiben, damit der Befehl besser lesbar ist.Beispielsweise:

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

Und die folgende Funktion macht genau das außer der Handhabung -Recurse elegant:

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

Wie kann ich das entfernen if anweisung aus meiner Get-Directories-Funktion oder ist dies ein besserer Weg, dies zu tun?

War es hilfreich?

Lösung

Versuchen Sie dies:

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

Dies funktioniert, weil -Recurse:$false dasselbe ist, das überhaupt keine -Recurse hat.

Andere Tipps

In PowerShell 3.0 ist es eingebrannt mit -File -Directory Schalter:

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

Die Antwort, die Oisin gibt, ist genau richtig.Ich wollte nur hinzufügen, dass dies dem Wunsch nahe kommt, eine Proxy-Funktion zu sein.Wenn Sie die haben PowerShell-Community-Erweiterungen 2.0 installiert haben, haben Sie diese Proxy-Funktion bereits.Sie müssen es aktivieren (es ist standardmäßig deaktiviert).Bearbeiten Sie einfach die Datei Pscx.UserPreferences.ps1 und ändern Sie diese Zeile so, dass sie wie unten gezeigt auf $ true gesetzt ist:

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

Beachten Sie die Einschränkung bezüglich dynamischer Parameter.Wenn Sie jetzt PSCX importieren, machen Sie es so:

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

Jetzt können Sie dies tun:

Get-ChildItem . -r Bin -ContainerOnly
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top