powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Определить работает ли скрипт (VBScript и PowerShell)
5 сообщений из 5, страница 1 из 1
Определить работает ли скрипт (VBScript и PowerShell)
    #38897280
dp_cmb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Задача такая - есть форма с кнопками написанная на 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
Определить работает ли скрипт (VBScript и PowerShell)
    #38897346
dp_cmb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот подумал, что можно наверное запустить VBS скрипт для проверки, так как он больше данных соберет, но как их передать обратно в форму эту PowerShell'овскую, чтобы там проанализировать ?
...
Рейтинг: 0 / 0
Определить работает ли скрипт (VBScript и PowerShell)
    #38902441
dp_cmb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На соседнем форуме посоветовали вот что, но я этот метод знал ..

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

Код: 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
Определить работает ли скрипт (VBScript и PowerShell)
    #38902474
dp_cmb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а вот и пользователь с доменом нашелся :)

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


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