none
помогите написать скрипт на PowerShell RRS feed

  • Вопрос

  • Добрый день. необходимо осуществить поиск конкретного файла на рабочих станциях по 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

Ответы

Все ответы

  • Подскажите какой смысл в поиске у всех сразу а не по очереди?

    А так вам вот сюда 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