Лучший отвечающий
помогите написать скрипт на PowerShell

Вопрос
-
Добрый день. необходимо осуществить поиск конкретного файла на рабочих станциях по AD. так, чтобы поиск осуществился сразу у всех, а не по очереди. Необходимо выбрать конкретную ветку из AD.
Есть найденный пример в интеренет
([adsisearcher]"(objectclass=computer)).FindAll() | Foreach {
$Name = $_.Properties.Item("Name")
get-childitem \\$Name\c$\* -include A.Quiet.Place.2018.BDRip.1080p.mkv -Recurse | Out-File d:\result.txt
}Но как я понимаю он ищет по порядку перебирая а не у всех сразу. Плюс к тому не могу добавить конкретную ветку из AD
Поменял на ([adsisearcher]"&((objectclass=computer)(objectclass=нужнаяветка))").FindAll()
вообще нет результата.
Версия 4.0 Powershella.
Решил пойти другим путем через Get-ADComputer
Получил список ПК в конкретной ветке. Как дальше осуществить поиск по нему?
Get-ADComputer -SearchBase ‘OU=*****,DC=*****,DC=*****’ -Filter * -Properties * | FT Name
20 июля 2018 г. 6:35
Ответы
-
Добрый день,
$Computers=Get-ADComputer -SearchBase "OU=*****,DC=*****,DC=*****" -Filter * | Select-object -expandProperty Name foreach ($Name in $Computers) { get-childitem \\$Name\c$\* -include A.Quiet.Place.2018.BDRip.1080p.mkv -Recurse | Out-File d:\result.txt }
А для распараллеливания можно добавить -Parallel в команду foreach https://docs.microsoft.com/en-us/powershell/module/psworkflow/about/about_foreach-parallel?view=powershell-5.1- Изменено Mikhail Efimov 20 июля 2018 г. 7:13
- Помечено в качестве ответа KazunEditor 24 июля 2018 г. 7:25
20 июля 2018 г. 7:08 -
$Computers=Get-ADComputer -SearchBase "OU=*****,DC=*****,DC=*****" -Filter * | Select-object -expandProperty Name Workflow GetFile { param($Computers) foreach -Parallel ($Name in $Computers) { InlineScript { $Name = $using:Name if(Test-Path -Path "\\$Name\c$") { Get-ChildItem -Path \\$Name\c$\* -Include A.Quiet.Place.2018.BDRip.1080p.mkv -Recurse } } } } GetFile $Computers | Foreach {$_.FullName} | Out-File d:\result.txt
- Помечено в качестве ответа KazunEditor 24 июля 2018 г. 7:25
20 июля 2018 г. 12:32Отвечающий
Все ответы
-
Подскажите какой смысл в поиске у всех сразу а не по очереди?
А так вам вот сюда Powershell Job.
20 июля 2018 г. 6:49 -
мне кажется так поиск будет быстрее осуществлен, чем по очереди. Пока он переберет все 300 ПК. Хотя с другой стороны сразу все ПК начнут искать будет кратковременный тупизм. А если по очереди? не могу в первом примере добавить условие поиска в конкретной ветке AD.
20 июля 2018 г. 6:56 -
Добрый день,
$Computers=Get-ADComputer -SearchBase "OU=*****,DC=*****,DC=*****" -Filter * | Select-object -expandProperty Name foreach ($Name in $Computers) { get-childitem \\$Name\c$\* -include A.Quiet.Place.2018.BDRip.1080p.mkv -Recurse | Out-File d:\result.txt }
А для распараллеливания можно добавить -Parallel в команду foreach https://docs.microsoft.com/en-us/powershell/module/psworkflow/about/about_foreach-parallel?view=powershell-5.1- Изменено Mikhail Efimov 20 июля 2018 г. 7:13
- Помечено в качестве ответа KazunEditor 24 июля 2018 г. 7:25
20 июля 2018 г. 7:08 -
спасибо, запустил. буду разбираться20 июля 2018 г. 7:37
-
дописал ключ -Append к выводу в файл, иначе он перезаписывает результат.
Вопрос по распараллеливанию. Добавил ключ -Parallel, но он не выполняет команду
Параметр "-parallel " можно использовать только в рабочем процессе.......
Как запустить распараллеливание?
20 июля 2018 г. 12:14 -
$Computers=Get-ADComputer -SearchBase "OU=*****,DC=*****,DC=*****" -Filter * | Select-object -expandProperty Name Workflow GetFile { param($Computers) foreach -Parallel ($Name in $Computers) { InlineScript { $Name = $using:Name if(Test-Path -Path "\\$Name\c$") { Get-ChildItem -Path \\$Name\c$\* -Include A.Quiet.Place.2018.BDRip.1080p.mkv -Recurse } } } } GetFile $Computers | Foreach {$_.FullName} | Out-File d:\result.txt
- Помечено в качестве ответа KazunEditor 24 июля 2018 г. 7:25
20 июля 2018 г. 12:32Отвечающий -
я так понимаю тут еще и проверяется доступность сетевого пути?20 июля 2018 г. 12:42