Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Определить работает ли скрипт (VBScript и PowerShell) / 5 сообщений из 5, страница 1 из 1
06.03.2015, 14:50
    #38897280
dp_cmb
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определить работает ли скрипт (VBScript и PowerShell)
Задача такая - есть форма с кнопками написанная на PowerShell (крутится на Windows Server 2012), надо, чтобы при нажатии на кнопку осуществлялась проверка запущен скрипт pdfspeed.vbs или нет. Если работает, то выдает предупреждение, если нет, то запускает.
Проблема в следующем - на сервере может быть запущено несколько разных скриптов, более того, от разных пользователей, а Task Manager'e видно только процессы WScript.exe ...

Есть решение в VBS

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
For Each objItem In GetObject("winmgmts:root\cimv2").ExecQuery("SELECT * FROM Win32_Process where Name ='WScript.exe'")
       objItem.GetOwner User, Domain
       objItem.GetOwnerSid Sid
              Rem -- Здесь обработать 
              objItem.ProcessId
              objItem.CommandLine Rem -- Отсюда можно выцепить имя скрипта (собственно, что и нужно)
              Domain&"\"&User
Next



Но происходит засада в PowerShell

Код: powershell
1.
Get-WMIObject -Class Win32_Process -filter "Name='wscript.exe'"



выдает (оставил только нужные строки)

Код: plaintext
1.
2.
CommandLine                : "C:\Windows\System32\WScript.exe" "C:\oracle\PDFSPEED\pdfspeed.vbs"
ProcessId                  : 6132

Но как узнать пользователя, запустившего скрипт, я не понял пока ...

Так вот не понятно, как обработать этот вывод ?
Загнать его в текстовый файл и обрабатывать файл ? Не хотелось бы ...

В этих трех командах куда-то пропадает значение из CommanLine

1.
Код: powershell
1.
Get-WMIObject -Class Win32_Process -filter "Name='wscript.exe'" | Select ProcessId, CommanLine



Код: plaintext
1.
2.
                            ProcessId CommanLine
                            --------- ----------
                                 6132
2.
Код: powershell
1.
get-process | Where-Object {$_.ProcessName -eq "wscript"} | select ID, CommandLine



Код: plaintext
1.
2.
                                   Id CommandLine
                                   -- -----------
                                 6132
3.
Код: plaintext
1.
2.
3.
4.
PS C:\Users\DP> $array = Get-Process wscript | Foreach {$_.Id,$_CommandLine}
PS C:\Users\DP> $array[0]
6132
PS C:\Users\DP> $array[1]
PS C:\Users\DP>

Помогите, плиз ... :)
...
Рейтинг: 0 / 0
06.03.2015, 15:26
    #38897346
dp_cmb
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определить работает ли скрипт (VBScript и PowerShell)
Вот подумал, что можно наверное запустить VBS скрипт для проверки, так как он больше данных соберет, но как их передать обратно в форму эту PowerShell'овскую, чтобы там проанализировать ?
...
Рейтинг: 0 / 0
12.03.2015, 13:54
    #38902441
dp_cmb
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определить работает ли скрипт (VBScript и PowerShell)
На соседнем форуме посоветовали вот что, но я этот метод знал ..

автор... предложить старый добрый (вариант) механизма Lock-файлов, который еще с прошлого тысячелетия используется в UNIX-ах ..
pdfspeed.vbs - при запуске создает пустой файл с именем типа:
%username%.%scriptname%.%pid%.lock
в юниксах такие файлы создаются обычно где-то типа "/var/lock/" в виндовсе можно выделить какую-нибудь папку с правом записи для всех, по завершении pdfspeed.vbs свой Lock-файл удаляет сам, таким образом вашему PowerShell скрипту остаётся в цикле (через sleep) опрашивать наличие Lock-файла до его естесственного удаления,
или "грохнуть" WScript.exe через его %pid% указанный в имени Lock-файла пользуясь админскими правами.
Да, механизм этот далеко не элегантен, груб, брутален, и в чём-то даже жесток, но "на безрыбье" вполне годится ....
...
Рейтинг: 0 / 0
12.03.2015, 13:55
    #38902443
dp_cmb
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определить работает ли скрипт (VBScript и PowerShell)
Сам же вот что нарыл

Код: powershell
1.
2.
3.
4.
5.
PS C:\Users\xxx> $a = Get-WMIObject -Class Win32_Process -filter "Name='wscript.exe'"
PS C:\Users\xxx> $a.CommandLine
"C:\Windows\System32\WScript.exe" "C:\oracle\PDFSPEED\v.vbs"
PS C:\Users\xxx> $a.ProcessId
3756



Осталось только теперь вычислить пользователя, запустившего этот скрипт ..
...
Рейтинг: 0 / 0
12.03.2015, 14:16
    #38902474
dp_cmb
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определить работает ли скрипт (VBScript и PowerShell)
а вот и пользователь с доменом нашелся :)

Код: powershell
1.
2.
3.
4.
PS C:\Users\ххх> $a.GetOwner().User
ххх
PS C:\Users\ххх> $a.GetOwner().Domain
domain_main
...
Рейтинг: 0 / 0
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Определить работает ли скрипт (VBScript и PowerShell) / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]