Gary Heath Ответов: 2

Как запустить скрипты на другом компьютере с помощью wmi


Я пытаюсь настроить свой ноутбук так, чтобы он использовался так же, как и мой рабочий стол. В основном все идет по плану, я использую устройство Lima и до сих пор преодолевал все проблемы.

Тем не менее, сейчас я пытаюсь синхронизировать свои электронные письма и не могу сделать ни головы, ни хвоста инструкций WMI, которые MS написала здесь Подключение к WMI на удаленном компьютере (Windows)[^] ...

Как на моем ноутбуке, так и на рабочем столе у меня есть код VBA в запуске Outlook, который проверяет, работает ли Outlook в данный момент на другой машине, и если да, то я хочу запустить скрипт на этой другой машине, чтобы выйти из нее, но именно здесь я сталкиваюсь с проблемой.

Outlook работает на моем ноутбуке, поэтому, когда я запускаю его на рабочем столе, я хочу запустить скрипт, который закрывает его на ноутбуке, код выглядит следующим образом (на самом деле это не мой окончательный код, это просто тест, чтобы получить что-то, в данном случае блокнот, для запуска на другой машине) ...

Sub ExecuteOnOtherMachine()

strComputer = "GARYLAPTOP-PC"
strCommand = "notepad.exe"

Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set objProcess = objWMIService.Get("Win32_Process")

errReturn = objProcess.Create(strCommand, Null, Null, intProcessID)

If errReturn = 0 Then
  Wscript.Echo "notepad.exe was started with a process ID: " & intProcessID
Else
  Wscript.Echo "notepad.exe could not be started due to error: " & errReturn
End If

End Sub


.. Однако на самом деле Установить objWMIService строка я получаю ошибку, Ошибка времени выполнения 70, отказано в разрешении .. Я предполагаю, что это связано с правилами подключения WMI и брандмауэра, но они, похоже, написаны для экспертов, это вообще не имеет смысла для такого программиста-любителя, как я !!!

Может ли кто-нибудь объяснить на простом, базовом английском языке, что мне нужно сделать, чтобы позволить этим 2 ПК, работающим под управлением Windows 7, выполнить программу на другом компьютере (программа, которую я хочу запустить, всегда хранится на другом компьютере) ?!?

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

Я нашел эту страницу устранения неполадок от MS, но опять же она не для слабонервных ... https://technet.microsoft.com/en-us/library/ff406382.aspx#H22

Я позволил WMI, чтобы обмениваться данными через Брандмауэр (частная)

2 Ответов

Рейтинг:
6

Dave Kreskowiak

Куча проблем. Во-первых, командная строка, которую вы обстреляли, совершенно неверна. Это именно то, что вы бежали:

"\\Gary-PC " "C:\Program Files\PS Tools\PsExec.exe " "\\GARY-PC\GaryPC - O\CloseOutlook.vbs "


Во-первых, у вас есть имя ПК, которое вообще ничего не делает, кроме как выбрасывает файл not found error.

Далее у вас есть путь к локальной копии PSEXEC. Это локально для вашей машины, не так ли?

У вас повсюду кавычки, что только усложняет чтение и отладку кода. Я предлагаю использовать Chr(34) вместо двойных кавычек. Это может быть немного больше набора текста, но облегчает отладку кода.

Тогда у вас есть какой-то путь к этому .VBS вы пытаетесь запустить. У вас есть части командной строки в неправильном порядке!

Сделайте себе одолжение и соберите командную строку в переменную, чтобы вы могли изучить ее содержимое, прежде чем пытаться запустить эту вещь:
Dim strPCName, strProgramName, strArgument, cmdLine

strPCName = "\\Gary-PC"
strProgramName = "C:\Program Files\PS Tools\PsExec.exe"
strArgument = "\\GARY-PC\GaryPC - O\CloseOutlook.vbs"

cmdLine = Chr(34) & strProgramName & Chr(34) & " " & strPCName & " " & Chr(34) & strArgument & Chr(34)

Shell(cmdLine, vbNormalFocus)


Gary Heath

Эта строка со всеми цитатами, которые я получил в интернете, сбивает с толку, не так ли :) ... вот почему я попытался сделать это без кавычек, и да, я просто экспериментирую, поэтому я не удивлен, что существует множество ошибок / проблем !!!

Я программист по профессии, COBOL, поэтому люблю пытаться разобраться во всем этом, но когда вы получаете сообщения об ошибках, такие как "файл не найден", но сообщение не говорит вам, какой файл не найден, я злюсь, расстраиваюсь и отчаиваюсь в стандартах программирования в наши дни ... без таких людей, как вы, это просто не стоило бы беспокоиться !!!

Я уже выпил пару кружек пива и просто собираюсь посмотреть футбол по телевизору, так что завтра попробую это сделать и дам вам знать, как я справляюсь, спасибо Вам большое за всю вашу помощь :)

Gary Heath

Я не смотрел на это уже пару дней, Дэйв, я не просто исчез :-) ... я дам тебе знать, как у меня дела.

Gary Heath

Теперь я фактически отказался от этой идеи, Дэйв, хотя Спасибо за вашу помощь, я принял ваши ответы :-)

Рейтинг:
19

Dave Kreskowiak

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

Чтобы запустить удаленный процесс (сценарий), ваша локальная учетная запись должна иметь права администратора на удаленной машине, обычно это означает, что обе машины должны находиться в одном домене. Конфигурации рабочих групп имеют гораздо более трудное время с этим, потому что ни одна машина не доверяет учетным записям пользователей другой.

Сценарий, запущенный удаленно, запускается от имени пользователя admin, который его запустил, а не от имени пользователя, вошедшего в систему на удаленной машине.

Ваш скрипт может завершить работу Outlook, хотя это не гарантирует, что он будет работать и не завершит работу Outlook красиво. Outlook будет жаловаться на то, что не будет выключен должным образом в следующий раз, когда вы запустите его, и он, вероятно, сделает ремонт .PST-файл он загружает.


Gary Heath

Ну, мне не нужно никакого взаимодействия, мне просто нужно запустить скрипт, и, согласно многочисленным статьям, это вполне выполнимо, за исключением того, что я ничего не могу сделать, так как постоянно получаю ошибки разрешений.

Теперь я попробовал PSexec в PStools, но я не могу заставить его работать, потому что я не могу получить правильную структуру команды, поэтому я попробовал Powershell, который выглядит и действует превосходно, но установив первую часть его, я снова получаю ошибки разрешения !!!

Set-Item : Доступ запрещен.
At line:1 char:9
+ Комплект-деталь &ЛТ;&ЛТ;&ЛТ;&ЛТ; в WSMan:\клиент\\localhost в конфигурация Гари-ПК
+ CategoryInfo : NotSpecified: (:) [Set-Item], InvalidOperationException
+ FullyQualifiedErrorId : Система.InvalidOperationException,Microsoft.PowerShell.Команды.SetItemCommand

Dave Kreskowiak

Вам будет отказано в доступе, потому что учетная запись, с которой вы вошли в систему на вашем компьютере, не является администратором на удаленном компьютере.

PSEXEC имеет те же ограничения безопасности и учетной записи администратора, а командная строка не так уж сложна. Это просто "PSEXEC [\\remoteMachineName] [командная строка для выполнения]". Например, "PSEXEC \\BWB0013PC msiexec /x {GUID} /q".

Вы можете запустить Блокнот, но он никогда не покажет интерфейс на удаленной машине. Откройте Диспетчер задач на этой машине, и вы все равно увидите, что он работает.

Gary Heath

Спасибо, Дэйв, причина, по которой я не мог правильно использовать формат PSEXEC, заключалась в том, что я был внутри программы VBA !!! Однако я все еще получаю проблемы, теперь он выдает мне ошибку 53, файл не найден, используя следующий код ...

Суб ExecuteOnOtherMachine()

Dim strPCName как строка
Dim strProgramName как строка
Тусклый страргумент в виде строки

strPCName = "\\Gary-PC "
strProgramName = "C:\Program файлы\PS Tools\PsExec.exe "
strArgument = "\\GARY-PC\GaryPC - O\CloseOutlook.vbs "

Вызов консоли(strPCName &амп; strProgramName &амп; strArgument, vbNormalFocus)

Вызов консоли("""" &амп; strPCName &ампер; """ """ &амп; strProgramName &ампер; """ """ &амп; strArgument &ампер; """", vbNormalFocus)

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

... Обе команды скрипта дают один и тот же результат, а также если я изменю strArgument на O:\CloseOutlook.vbs (так что это фактический адрес на ПК без сетевого пути) он все еще дает идентичную ошибку :-( ... это сводит меня с ума !!!