Войти

Показать полную графическую версию : [решено] запуск приложения


null999
28-10-2016, 20:54
Имеется довольно большая сетка комп*ютеров, возможно ли с помощью скрипта запустить програму только на тех пк, где есть определенное количество оперативки, допустим больше 3ГБ ?

Iska
28-10-2016, 23:03
Можно:
Option Explicit

Dim strComputer

Dim objSWbemLocator
Dim objSWbemServicesEx
Dim objSWbemObjectEx

Dim lngProcessID


strComputer = "."


Set objSWbemLocator = WScript.CreateObject("WbemScripting.SWbemLocator")
Set objSWbemServicesEx = objSWbemLocator.ConnectServer(strComputer, "root\cimv2")

For Each objSWbemObjectEx In objSWbemServicesEx.ExecQuery("SELECT TotalPhysicalMemory FROM Win32_ComputerSystem")
If CSng(objSWbemObjectEx.TotalPhysicalMemory) > 3 * 2 ^ 30 Then
If objSWbemServicesEx.Get("Win32_Process").Create("c:\Windows\System32\notepad.exe", "c:\Windows\System32", Null, lngProcessID) = 0 Then
WScript.Echo "Success execute. PID: [" & CStr(lngProcessID) & "]."
Else
WScript.Echo "Execute failure."
End If
End If
Next

Set objSWbemObjectEx = Nothing
Set objSWbemServicesEx = Nothing
Set objSWbemLocator = Nothing

WScript.Quit 0

null999
28-10-2016, 23:13
("SELECT TotalPhysicalMemory FROM Win32_ComputerSystem") »
всегда прописывать win32 или для x64 нужно заменять на win64 ?

Iska
29-10-2016, 00:38
всегда прописывать win32 или для x64 нужно заменять на win64 ? »
Не нужно. Win32_ComputerSystem — это имя класса: Win32_ComputerSystem class (Windows) (https://msdn.microsoft.com/en-us/library/aa394102(v=vs.85).aspx), где Win32_ является частью имени.

null999
29-10-2016, 10:13
cпасибо, работает, вот только можно ли убрать окно, которое после удачного запуска появляется?что бы закрить ужно каждый раз "ок" кликать

Iska
29-10-2016, 10:18
которое после удачного запуска появляется?что бы закрить ужно каждый раз "ок" кликать »
Закомментируйте строку:
'WScript.Echo "Success execute. PID: [" & CStr(lngProcessID) & "]."

null999
29-10-2016, 10:37
работает, спасибо

и подскажите еще, как так сделать с видеокартой

Iska
29-10-2016, 10:51
и подскажите еще, как так сделать с видеокартой »
А что с видеокартой?!

null999
29-10-2016, 11:01
проверять, есть ли там допустим 512мб?
на что тогда поменять TotalPhysicalMemory?

Iska
30-10-2016, 00:12
проверять, есть ли там допустим 512мб?
на что тогда поменять TotalPhysicalMemory? »
Тут, пожалуй, придётся перейти на язык с более строгой типизацией (в VBScript нет подтипа прямо соответствующего беззнаковому целому UInt).

PowerShell:
Get-WmiObject -ComputerName "." -Class 'Win32_VideoController' -Property 'AdapterRAM' |`
ForEach-Object -Process {
if($_.AdapterRAM -gt 512Mb) {
$o__PARAMETERS = ([WMICLASS]'\\.\Root\CimV2:Win32_Process').Create('c:\Windows\System32\notepad.exe', 'c:\Windows\System32', $Null)
if($o__PARAMETERS.ReturnValue -eq 0) {
Write-Host "Success execute. PID: [$($o__PARAMETERS.ProcessId)]."
} else {
Write-Host "Execute failure."
}
}
}
У PowerShell помимо обращения к Wbem существуют и иные возможности по удалённой работе.

null999
30-10-2016, 09:29
большое спасибо за помощь




© OSzone.net 2001-2012