none
Получить список ПК, на котором запущен определенный процесс. RRS feed

  • Вопрос

  • Добрый день! Есть домен более 1500 ПК. Нужен скрипт, в котором я смогу указать имя процесса, а он возьмет из AD список всех пк и выведет мне имена ПК, на которых запущен указанный мной процесс. Заранее спасибо за помощь!
    6 апреля 2015 г. 12:03

Ответы

  • $computers = Get-ADComputer -Filter {Enabled -eq $true} | Foreach {$_.DNSHostName}
    
    workflow Get-ProcessName {
    	param($ComputerName,$ProcessName = "notepad.exe")
    	
    	ForEach -Parallel ($Computer in $ComputerName)
        {
    		InlineScript {
    			$Computer = $using:Computer
    			
    			try {
    				$result = Get-WmiObject -Class Win32_Process -Filter "Name='$using:ProcessName'" -ComputerName $Computer -ErrorAction Stop
    				if ($result) {$result = "RUNNING"} else { $result = "NOT RUNNING"}
    			}
    			catch {
    				$result = "$_"
    			}
    			
    			"$Computer,$result"
    		}
        }
    }
    
    Get-ProcessName -ComputerName $computers -ProcessName cmd.exe | ConvertFrom-Csv -Header ComputerName,Result


    • Изменено KazunEditor 6 апреля 2015 г. 13:17
    • Предложено в качестве ответа Vector BCOModerator 6 апреля 2015 г. 14:27
    • Помечено в качестве ответа KazunEditor 8 апреля 2015 г. 14:27
    6 апреля 2015 г. 13:12
    Отвечающий

Все ответы

  • $computers = Get-ADComputer -Filter {Enabled -eq $true} | Foreach {$_.DNSHostName}
    
    workflow Get-ProcessName {
    	param($ComputerName,$ProcessName = "notepad.exe")
    	
    	ForEach -Parallel ($Computer in $ComputerName)
        {
    		InlineScript {
    			$Computer = $using:Computer
    			
    			try {
    				$result = Get-WmiObject -Class Win32_Process -Filter "Name='$using:ProcessName'" -ComputerName $Computer -ErrorAction Stop
    				if ($result) {$result = "RUNNING"} else { $result = "NOT RUNNING"}
    			}
    			catch {
    				$result = "$_"
    			}
    			
    			"$Computer,$result"
    		}
        }
    }
    
    Get-ProcessName -ComputerName $computers -ProcessName cmd.exe | ConvertFrom-Csv -Header ComputerName,Result


    • Изменено KazunEditor 6 апреля 2015 г. 13:17
    • Предложено в качестве ответа Vector BCOModerator 6 апреля 2015 г. 14:27
    • Помечено в качестве ответа KazunEditor 8 апреля 2015 г. 14:27
    6 апреля 2015 г. 13:12
    Отвечающий
  • Спасибо, работает. Но данный скрипт показывает, результаты RUNNING и NOT RUNNING. А можно ли сделать так, чтобы он показывал только те компьютеры, на которых запущен такой процесс. Если не запущен, то в результатах не отображалось?
    6 апреля 2015 г. 14:07
  • $results = Get-ProcessName -ComputerName $computers -ProcessName cmd.exe | ConvertFrom-Csv -Header ComputerName,Result 
    $results | Where {$_.Result -eq "Running"}

    • Предложено в качестве ответа Vector BCOModerator 6 апреля 2015 г. 14:27
    6 апреля 2015 г. 14:16
    Отвечающий