Member 13370432 Ответов: 1

Запустите файл .exe на сетевом (доменном) компьютере с помощью WMI или что-то еще, может быть?


I am writing an application (Windows VB.net Form) in Visual Studio 2017 which gathers all the Computers present in a Domain from Active Directory, it then checks each machine (if it is switched on) for the presence of Antivirus software (checks for a specific file). If the Antivirus is not installed the installer is copied to a folder on the PCs local root drive. The final part of the puzzle is to get the remote computer to start the installer as a background process (the .exe has a -q flag option when run from cmd). I am having real problems getting this to work. The account the application is running under on the server is a Domain Admin account. I am aware that maybe PowerShell is better suited to this but as this application will be used in over 70 sites and each one is not necessarily set up the in same way as the previous I don't want our IT guys to have to tweak scripts etc.

Я подумал, что, возможно, WMI может быть лучшим методом, какие бы предложения ни были получены...

Что я уже пробовал:

Private Sub Button2_Click(sender As Object, e As EventArgs) обрабатывает кнопку InstallButton.Щелчок

Dim PCsource As String = "C:\Path\Install.txt" 'список компьютеров из AD
Dim Check As String 'строка считывается из PCsource
Дим, Установленных В Системе.ИО.Файл Журнала Модулю Записи StreamWriter '
Dim UName As String = "someuser" 'попробовал добавить учетные данные здесь
Dim UPass As New SecureString() 'но это не помогло

Упасс.AppendChar("S")
Упасс.AppendChar("o")
Упасс.AppendChar("m")
Упасс.AppendChar("e")
Упасс.AppendChar("p")
Упасс.AppendChar("a")
Упасс.AppendChar("s")
Упасс.AppendChar("s")
Упасс.AppendChar("!")

Если System.IO.File.Exists(PCsource) = True Тогда
Дим Компьютеру, Так Как Новая Система.ИО.Что Streamreader(PCsource)
Занимайтесь Пока Компьютером.Peek() <> -1
Проверить = Компьютер.С readline()
Попробуй
Dim InstStart Как Новая Система.Диагностика.Процесс
Dim InstProcess Как Новая Система.Диагностика.Изменение панели("cmd.exe" аргументы:="/ц "&ампер; "\ \ " &амп; проверить &ампер; "\с$\Path\AntiVirus.exe -вопрос")
InstProcess.UseShellExecute = False
InstProcess.RedirectStandardError = True
InstProcess.RedirectStandardInput = True
InstProcess.RedirectStandardOutput = True
InstProcess.WorkingDirectory = "C:\Path"
InstProcess.Домен = Домен
InstProcess.Имя Пользователя = UName
InstProcess.Пароль = UPass
InstStart = Система.Диагностика.Процесс.Start(InstProcess)
Установлено = My.Computer.файловая система.OpenTextFileWriter("C:\Path\Installed.txt", Правда)
Установленный.WriteLine("антивирусный установщик запущен" & Check, True)
Установленный.Закрывать()
Поймать Ex Как Исключение
Установлено = My.Computer.файловая система.OpenTextFileWriter("C:\Path\Installed.txt", Правда)
Установленный.Метода WriteLine(Исх.Сообщение, Правда)
Установленный.Закрывать()
Конец Попытки
Петля
Конец, Если

Ящик для сообщений.Шоу("готово!!!")


Конец Подводной Лодки

1 Ответов

Рейтинг:
0

Dave Kreskowiak

Да, этот код не запускает процесс на удаленной машине. Он запускает процесс на любой машине, на которой выполняется этот код. Класс Process, IIRC, не будет запускать процесс на удаленной машине.

WMI лучше подходит для этого, и вы можете запускать неинтерактивные удаленные процессы.

Еще лучше было бы отказаться от этого и использовать коммерческое программное обеспечение, разработанное и созданное для установки программного обеспечения на рабочих станциях, например MS System Center Configuration Manager.