Запустите скрипт powershell для каждой папки с подпапками - PullRequest
0 голосов
/ 21 декабря 2018

У меня есть несколько скриптов, которые мне нужно запустить для дюжины папок с относительным путем.Я пытаюсь решить эту проблему с помощью мастер-скрипта, запускаемого для каждой папки в этом пути, по одной папке за раз.Все папки являются дочерними по отношению к папке "здесь" в указанном ниже пути.Кажется, я не могу понять правильный синтаксис, но я думаю, что я близок:)

Есть ли более эффективный способ запуска сценария для содержимого каждой папки в каталоге, одна папка ввремя?

$pdfFolder = 'C:\path\to\folders\here'
$Completed = Get-ChildItem $pdfFolder -Recurse

ForEach-Object ($Completed){
Invoke-Expression -Command "C:\path\where\scriptis\script.ps1"
}`

1 Ответ

0 голосов
/ 21 декабря 2018
$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 следует избегать , потому что это редко правильный инструмент иможет представлять угрозу безопасности.

Все, что вам нужно, чтобы вызвать скрипт по его цитируемому и / или хранимой в- переменной путь к файлу, - это использовать &, оператор вызова , как показано выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...