2016-07-19 3 views
5

nicht Quelle all Powershell-Skripts aus dem Verzeichnis versuchte dot Können:Wie Quelle all Powershell-Skripts aus einem Verzeichnis

. .\*.ps1 

Returns this:

> : The term '.\*.ps1' is not recognized as the name of a cmdlet, 
> function, script file, or operable program. Check the spelling of the 
> name, or if a path was included, verify that the path is correct and 
> try again. At line:1 char:3 
> + . .\*.ps1 
> + ~~~~~~~ 
>  + CategoryInfo   : ObjectNotFound: (.\*.ps1:String) [], CommandNotFoundException 
>  + FullyQualifiedErrorId : CommandNotFoundException 
+0

Ich wünsche '. . \ *. ps1' hat funktioniert –

Antwort

4

Verwenden Sie Get-ChildItem, um alle *.ps1 Dateien zu erfassen, dann durchlaufen Sie die Schleife gh sie mit ForEach-Object und Punkt-Quelle einzeln

$Path = "C:\Scripts\Directory" 
Get-ChildItem -Path $Path -Filter *.ps1 |ForEach-Object { 
    . $_.FullName 
} 

Wenn Sie die oben in einem Skript setzen, und das Skript selbst in $Path befindet, stellen Sie sicher, dass die Datei selbst auszuschließen, um es zu vermeiden rekursiv dot-Sourcing sich immer und immer wieder:

$Path = "C:\Scripts\Directory" 
Get-ChildItem -Path $Path -Filter *.ps1 |Where-Object { $_.FullName -ne $PSCommandPath } |ForEach-Object { 
    . $_.FullName 
} 
+0

Wenn ich diesen Befehl zu einer Datei hinzufüge, sie entwerfe und ausführe, hängt sie. Weißt du, wie kann ich diesen Befehl in eine Datei schreiben, so dass es funktioniert? – Alex

+0

Das ist, weil es rekursiv beginnt, selbst zu dot-sourcing, das kann behoben werden, lassen Sie mich die Antwort aktualisieren –

3

Dies sollte funktionieren:

Get-ChildItem -Filter '*.ps1' | Foreach { . $_.FullName } 
0

Um dies zu erreichen, können Sie eine Schleife durch alle Ihre Powershell-Dateien, und beziehen sie:

foreach ($ps1 in (ls *.ps1)) { 
    . $ps1.FullName 
} 
Verwandte Themen