$pdfFolder = 'C:\path\to\folders\here'
# Get all subfolders - note the -Directory switch (PSv3+)
$Completed = Get-ChildItem $pdfFolder -Recurse -Directory
# Pipe the subfolders to ForEach-Object, invoke the
# script with & (avoid Invoke-Expression), and pass the subfolder
# at hand as an argument.
$Completed | ForEach-Object {
& "C:\path\where\scriptis\script.ps1" $_
}
Что касается того, что вы пытались :
Get-ChildItem $pdfFolder -Recurse
Эта команда возвращает не только папки (каталоги)), но также файлы .Чтобы ограничить вывод папками, передайте переключатель -Directory
(PSv3 +).
ForEach-Object ($Completed) { ... }
Вы путаете синтаксис foreach
loop с синтаксисом на основе конвейера ForEach-Object
командлет .
Командлет ожидает ввода от pipe , так что вместо этого вы должны использовать
$Completed | ForEach-Object { ... }
.
Также обратите внимание, что если вам действительно не нужно сначала собрать все подпапки в массиве, вы можете просто направить вызов Get-ChildItem
напрямуюForEach-Object
.
Invoke-Expression -Command "C:\path\where\scriptis\script.ps1"
Invoke-Expression
следует избегать , потому что это редко правильный инструмент иможет представлять угрозу безопасности.
Все, что вам нужно, чтобы вызвать скрипт по его цитируемому и / или хранимой в- переменной путь к файлу, - это использовать &
, оператор вызова , как показано выше.