2014-11-21 2 views
0

У меня есть сценарий PowerShell (имя: Get-OrphanHomeFolder.ps1 - Автор: Jaap Brasser - http://www.jaapbrasser.com/new-script-find-orphaned-home-folders/) Я загрузил и модифицировал для поиска и удаления осиротевших дома папки на нашем файловом сервере.PowerShell - создать список/массив имен папок для запуска скрипта с

Из-за большое количество пользователей в компании, наряду с медленной производительностью нашего восстановления программного обеспечения при перечислении папок для выбора возможных реставраций, мы изменили нашу структуру домашней папки с традиционной компоновки:

D: 
| 
|--Home 
    | 
    |--100000 
    |--102001 
    |--115000 
     etc. 

для структуры, как это:

D: 
| 
|--Home 
    | 
    |--100xxx 
    | | 
    | |--100000 
    | |--100001 
    | |--100002 
    |  etc. 
    |--102xxx 
    | | 
    | |--102000 
    | |--102001 
    | |--102002 
    |  etc. 
    |--115xxx 
    | | 
    | |--115000 
    | |--115001 
    |  etc. 

Если я запускаю скрипт, используя этот формат командной строки (.\Get-OrphanHomeFolder.ps1 -HomeFolderPath \\fileserver\homeshare\100xxx) он прекрасно работает, но требует от меня, чтобы вручную запустить его для каждой вложенной папки (100xxx, 101xxx и т. Д.), Содержащую группу домашних папок пользователя. Есть ли способ заставить PowerShell перечислять все вложенные папки, которые существуют непосредственно внутри D:\Home, без более глубоких уровней, а затем использовать их для создания списка/массива 100xxx, 101xxx и т. Д. Для запуска основного кода?

+0

'Get-Childitem' должны делать то, что вы хотите – Paul

ответ

1

Получите все каталоги верхнего уровня, а затем пройдите через них.

Get-childitem \\fileserver\homeshare -directory | foreach-object {.\get-orphanhomefolder.ps1 -homefolderpath $_.fullname} 

Если у вас имеется достаточное количество системных ресурсов, можно запускать несколько экземпляров сценария параллельно с использованием start-job, чтобы сократить общее время выполнения - но я бы рекомендовал ограничение не более чем N-1 параллельных рабочих мест, где N является количество процессоров в системе, выполняющей задания. См. Пример http://www.poshpete.com/powershell/creating-a-throttle-for-background-tasks-without-rewriting-your-code-v2.

+0

я дам, что выстрел. Когда дело доходит до PowerShell, мне повезло, что я даже заклинаю это правильно. :-) Учитывая поздний час и пятница, я проведу тестирование до следующей недели. –

+0

Создал структуру тестовых папок с некоторыми фиктивными папками. Разработал сценарий, и он работал как шарм. Спасибо за вашу помощь. –

1

Get-ChildItem поддерживает подстановочные знаки в пути. Это может быть так же просто, как работает эта команда:

.\Get-OrphanHomeFolder.ps1 -HomeFolderPath \\fileserver\homeshare\*