Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Список процессов на удаленной машине

Ответить
Настройки темы
PowerShell - [решено] Список процессов на удаленной машине

Старожил


Сообщения: 173
Благодарности: 4

Профиль | Отправить PM | Цитировать


Изменения
Автор: tarasov.evgeny
Дата: 14-10-2010
Добрый день.
Есть такой скрипт.
Код: Выделить весь код
Add-PSSnapin Quest.ActiveRoles.ADManagement
$pslist = Get-QADComputer -name cl-ru-cla*
foreach ($1 in $pslist) {Write-host $1.name; Get-WmiObject -Class win32_process -ComputerName $1.name |
Select-Object path,name | Where-Object -FilterScript {$_.path -notlike "c:\windows*"} | Where-Object -FilterScript {$_.path -notlike "c:\Program files\*"}}
В результате получаем:
Код: Выделить весь код
CL-RU-CL*(#имя компьютера)
                                                                                                                                    System Idle Process                                                                         
                                                                                                                                    System                                                                                      
C:\AdminSMSecr\Scripts\BlockProcess.exe                                                                          BlockProcess.exe                                                                            
C:\Documents and Settings\petrova.olga\Application Data\QipGuard\QipGuard.exe              QipGuard.exe                                                                                
C:\PROGRA~1\MICROS~2\Office12\OUTLOOK.EXE                                                                          OUTLOOK.EXE                                                                                 
C:\Office\MSACCESS.EXE                                                                                               MSACCESS.EXE
Не могу передать по конвейру в out-file

Отправлено: 16:45, 14-10-2010

 

Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Цитата tarasov.evgeny:
Не могу передать по конвейру в out-file »
Код: Выделить весь код
foreach ($1 in $pslist) {
  Write-host $1.name; Get-WmiObject -Class win32_process -ComputerName $1.name |
  Select-Object path,name |
  Where-Object -FilterScript {$_.path -notlike "c:\windows*"} |
  Where-Object -FilterScript {$_.path -notlike "c:\Program files\*"} |
  Out-File -FilePath "C:\out.txt" -Append
}
Это сообщение посчитали полезным следующие участники:

Отправлено: 10:19, 15-10-2010 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Старожил


Сообщения: 173
Благодарности: 4

Профиль | Отправить PM | Цитировать


Пытаюсь написать функцию
Код: Выделить весь код
Function Mytest {
$pslist = Read-Host "Введите переменную\имя компьютера:"
Get-QADComputer -Name $pslist | Select-Object name}
Далее хочу передать вывод в другую часть кода:
Код: Выделить весь код
Function Mytest2 {
$pslist = Read-Host "Введите переменную\имя компьютера:"
$a = Get-QADComputer -Name $pslist | Select-Object name}
И эту переменную подставить в:
Код: Выделить весь код
foreach ($1 in $a) {
  Write-host $1.name; Get-WmiObject -Class win32_process -ComputerName $1.name |
  Select-Object path,name |
  Where-Object -FilterScript {$_.path -notlike "c:\windows*"} |
  Where-Object -FilterScript {$_.path -notlike "c:\Program files\*"} |
  Out-File -FilePath "C:\out.txt" -Append
}
Но переменная $a (на втором этапе) пустая
т.е. мне нужно полученный результат передать в другой массив, чтобы его перебрать командой foreach

Отправлено: 18:40, 15-10-2010 | #3


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Цитата tarasov.evgeny:
переменная $a (на втором этапе) пустая »
потому что она в фигурных скобках - локальная, определена только в пределах блока:
Код: Выделить весь код
$pslist = Read-Host "Введите переменную\имя компьютера:"
$a = Get-QADComputer -Name $pslist
foreach ($1 in $a) {
...
}

Отправлено: 11:20, 16-10-2010 | #4


Старожил


Сообщения: 173
Благодарности: 4

Профиль | Отправить PM | Цитировать


Пытаюсь сделать две вещи.
Проверить включен ли компьютер, если выключен - скинуть информацию в файл , что компьютер такой-то выключен.

Пытаюсь показать каждого пользователя на компьютере.
Вот такой скрипт показывает пользователей
Код: Выделить весь код
Function GetProgramFiles {
$pslist = Read-Host "Введите имя компьютера"
$a = Get-QADComputer -Name $pslist
#foreach ($1 in $a) {Get-WmiObject -Class Win32_ComputerSystem -ComputerName $1.name | Select-Object Username};
foreach ($1 in $a) {$1.name;Get-WmiObject -Class Win32_ComputerSystem -ComputerName $1.name | Select-Object Username;
Get-WmiObject -Class win32_process -ComputerName $1.name |
Select-Object path,name |
Where-Object -FilterScript {$_.path -notlike "c:\windows*"} |
Where-Object -FilterScript {$_.path -notlike "c:\Program Files*"} |
Where-Object -FilterScript {$_.path -notlike "c:\PROGRA~1\*"} |
Format-Table -wrap }
Write-Host "Done"}
Вот результат. Как видите информация есть, но сначала отображается список пользователей, а затем список процессов, на компьютерах.
Хотелось бы перенести данные за имя компьютера и получить только имя пользователя без домена и скобок.
Странно в функции foreach идет сначала имя компьютера - $1.name, затем значение Username и потом уже показывается список процессов. А в выводе получается:
список пользователей, затем имя и список процессов.
Код: Выделить весь код
PS > GetProgramFiles
@{Username=domen\fedya}
@{Username=domen\natasha}
...
computer1
Path                                                                                          name                                                                                        
----                                                                                          ----                                                                                        
                                                                                              System Idle Process                                                                         
                                                                                              System                                                                                      


computer2
Path                                                                                          name                                                                                        
----                                                                                          ----                                                                                        
                                                                                              System Idle Process                                                                         
                                                                                              System               
...
вторая функция запихнута в if, но не работает с массивом, а только с одним значением:
Код: Выделить весь код
Function GetProgramFiles2 {
$pslist = Read-Host "Введите имя компьютера. "
IF (Test-Connection $pslist -Count 2 -Delay 2 -Quiet)
{
$a = Get-QADComputer -Name $pslist
foreach ($1 in $a) {$1.name; Get-WmiObject -Class win32_process -ComputerName $1.name |
Select-Object path,name |
Where-Object -FilterScript {$_.path -notlike "c:\windows*"} |
Where-Object -FilterScript {$_.path -notlike "c:\Program Files*"} |
Where-Object -FilterScript {$_.path -notlike "c:\PROGRA~1\*"} |
Where-Object -FilterScript {$_.path -notlike "C:\CRMCatpro\Office\MSACCESS.EXE"} |
Where-Object -FilterScript {$_.path -notlike "C:\AdminSMSecr\Scripts\BlockProcess.exe"} | Format-Table -wrap }
Write-Host "Done"}
Else {"Компьютер выключен"}}

Последний раз редактировалось tarasov.evgeny, 19-10-2010 в 14:44.


Отправлено: 13:39, 19-10-2010 | #5


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Цитата tarasov.evgeny:
Хотелось бы перенести данные за имя компьютера и получить только имя пользователя без домена и скобок. »
как-то так:
Код: Выделить весь код
Function GetProgramFiles{
  $pslist = Read-Host "Введите имя компьютера:"
  $a = Get-QADComputer -Name $pslist

  ForEach ($1 in $a) {
    "---------------------"
    "Computer: " + $1.name
    Get-WmiObject Win32_ComputerSystem -ComputerName $1.name |
    ForEach-Object {"UserName: " + [regex]::replace($_.UserName,".*\\","")}
    "---------------------"
    Get-WmiObject Win32_Process -ComputerName $1.name |
    Where-Object {($_.path -notlike "c:\windows\*")`
      -and ($_.path -notlike "c:\Program Files\*")`
      -and ($_.path -notlike "c:\PROGRA~1\*")} |
    ForEach-Object {$_.Name}
  }
}
Цитата tarasov.evgeny:
вторая функция запихнута в if, но не работает с массивом, а только с одним значением »
потому что Test-Connection (у меня такого нет, равно как и Get-QADComputer) проверяет один хост, а не список $pslist, поэтому он должен выполняться внутри блока ForEach (для каждого имени)

Последний раз редактировалось amel27, 21-10-2010 в 02:44. Причина: очепятка

Это сообщение посчитали полезным следующие участники:

Отправлено: 08:55, 20-10-2010 | #6


Старожил


Сообщения: 173
Благодарности: 4

Профиль | Отправить PM | Цитировать


amel27, спасибо огромное
Ваш скрипт не работает пока у меня, но в нем есть информация как можно форматировать вывод. Чуть позже буду совмещать ваш скрипт, со скриптом ниже. Ошибку тоже скину...
по поводу того, что test-connection нужно запихнуть во внутрь - меня сегодня ночью осенило, но не успел написать.
Код: Выделить весь код
Function GetProgramFiles2 {
$pslist = Read-Host "Введите имя компьютера."
$a = Get-QADComputer -Name $pslist
foreach ($1 in $a) 
{IF (Test-Connection $1.name -Count 2 -Delay 2 -Quiet)
{
"---------------------------------"
    "Computer: " + $1.name
Get-WmiObject Win32_ComputerSystem -ComputerName $1.name |
    ForEach-Object {"UserName: " + [regex]::replace($_.UserName,".*\\","")}
"---------------------------------"
Get-WmiObject -Class win32_process -ComputerName $1.name |
Select-Object path,name |
Where-Object -FilterScript {$_.path -notlike "c:\windows*"} |
Where-Object -FilterScript {$_.path -notlike "c:\Program Files*"} |
Where-Object -FilterScript {$_.path -notlike "c:\PROGRA~1\*"} |
Where-Object -FilterScript {$_.Name -ne "System Idle Process"} |
Where-Object -FilterScript {$_.Name -ne "System"} |
Format-Table -wrap }
Else {
"---------------------------------"
"Computer " + $1.name + " turn off:"
"---------------------------------"}}}
Я понимаю, почему у вас нет QADComputer - это не стандартная штука. Вот ссылка:
http://www.quest.com/powershell/activeroles-server.aspx
Странно, что у вас нет Test-Connection. Я думал это стандартная функция. У меня Windows XP стоит и она есть. Дома есть Win7 - там тоже есть

Последний раз редактировалось tarasov.evgeny, 20-10-2010 в 15:22. Причина: Нашел ошибку в своем скрипте. Исправил


Отправлено: 13:10, 20-10-2010 | #7


Старожил


Сообщения: 173
Благодарности: 4

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
Function GetProgramFiles{
  $pslist = Read-Host "Введите имя компьютера:"
  $a = Get-QADComputer -Name $pslist

  ForEach-Object ($1 in $a) {
    "---------------------"
.....
Поскольку мы ничего не передаем по конвейру то нужна команда foreach
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:44, 20-10-2010 | #8



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Список процессов на удаленной машине

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
VBS/WSH/JS - [решено] Выполнение скриптов на удаленной машине... в частности js RUVATA Скриптовые языки администрирования Windows 12 15-10-2010 12:20
CMD/BAT - [решено] запуск на удаленной машине bat-файл с помощью psexec ejik_off Скриптовые языки администрирования Windows 10 16-09-2010 19:31
Доступ - [решено] Microsoft Management Console. Запрещен доступ к оснасткам на удаленной машине. Clever_man Microsoft Windows 7 8 28-05-2010 10:03
Интернет - Как отключить инет на удаленной машине? surgutfred Microsoft Windows 2000/XP 2 29-08-2008 05:00
Разное - настройки iexplorer через реестр на удаленной машине choodo Microsoft Windows 2000/XP 2 14-08-2008 14:14




 
Переход