Еще использую и такой способ:
Для тех, у кого в организации используется SCCM от Майкрософт: установленные SCCM-ные клиенты на машинах принимают запросы на подключение от удаленных экспертов "своими" встроенными возможностями (инсталлируются с клиентом специальные драйвера), инициируется это подключение экспертами с SCCM-оснастки пунктом "Remote Tools" на интересуемой машине в коллекции/запросе.
А стартовать такое подключение, как оказалось, можно не только из оснастки, но и непосредственным вызовом SCCM-ного приложения коннекта к машине - RC.exe c параметрами: "1" и имя компьютера, т.е. я запускаю его из своей скриптовой проги управления машинами вызовом батника:
::: Start rc.exe - RemoteTools SCCM
start "" "c:\Program Files\Microsoft Configuration Manager Console\AdminUI\bin\i386\rc.exe" 1 %1
Из плюсов: т.к. почти на всех машинах домена стоят клиенты, то очень выручает, когда по каким-то причинам стандартный Offer Remote Assistance не может достучаться, а надо срочно подключиться, и еще к слову - подключается намного быстрее Удален.помощника.
Из фич: на клиенте (предварительно зайдя на него RDC) можно отключить требования подтверждения подключения юзером (хотя "горячая" подмена файлов в случае с Assistance - более гибка).
Из минусов: конечно, кроме самого наличия SCCM-клиента на удаленной машине, еще в отличие от Удален.помощника передает также и изображение обоев Рабочего стола -а там бывает такое...
Для пунтка 4 (автоматизация старта Offer Remote Assistance) использую скрипт:
'**** run_RemAs.vbs *****************************
' Запуск "Offer Remote Assistance"
' Параметр - имя подключаемого компьютера
' (!) Имя окна с Ассистентом - для англоязычных Windows XP'
' Для Windows-7 - имя машины сразу же передается параметром
'************************************************
Option Explicit
Dim giUnsolicited
' giUnsolicited = 0
giUnsolicited = 1 ' 1-режим подмены своего "UnSolicitedRCUI.htm" / 0 - обычный режим
Dim giDebug
giDebug = 0 ' 1-вывод отладочных сообщений и т.п. / 0 - обычный режим
' --- чтение своей инишки ----------------------------
' INI читается в случае ее наличия,
' используется для переопеределения режима отладки (ищется строка: debug=...)
Const sMyINI = "run_RemAs.ini"
Dim fso
Set fso=CreateObject("Scripting.FileSystemObject")
Dim CurDir
Dim yes_no, s, iPos
CurDir = fso.GetAbsolutePathName(".")
yes_no = fso.FileExists( CurDir & "\" & sMyINI)
If yes_no Then
Dim fspi
Set fspi=fso.OpenTextFile(sMyINI, 1)
Do While not fspi.AtEndOfStream
s = fspi.ReadLine
iPos = InStr(1, s, "=")
If iPos>0 Then
If LCase(Trim(Left(s, iPos-1)))="debug" Then
giDebug = CInt( Trim( Right(s, Len(s)-iPos) ) ) ' правая от "=" часть преобразовывается в целое число
End IF
End IF
Loop
fspi.Close
Set fspi = Nothing
End IF '(yes_no)
' -----
Dim A
Set A=Wscript.Arguments
Dim sComp
sComp = ""
If A.Count>=1 Then ' имеется переданный параметр
sComp = A(0)
else
sComp = InputBox("Введите имя подключаемого компьютера", "Настройка запуска ""Offer Remote Assistance""")
End IF
Dim oShell
Set oShell = WScript.CreateObject("WScript.Shell")
If sComp<>"" Then ' имеется непустое имя компа
If giDebug Then FuncAppendOneStrToTXTFile "run_RemAs.log", "---- Start: " & Now()
Dim objScriptExec, strResults
Set objScriptExec = oShell.Exec("%comspec% /c ver")
strResults = objScriptExec.StdOut.ReadAll
iPos = InStr(strResults, "Version 6.")
If iPos>0 Then ' Windows 7 !!!!'
If giDebug Then FuncAppendOneStrToTXTFile "run_RemAs.log", "Win: Version 6."
oShell.Run "%SystemRoot%\system32\msra /offerRA " & sComp
else
'Windows XP '
' If MsgBox("<OK> -- вызов Ассистента с занесением имени хоста в свой UnSolicitedRCUI.htm" &vbCr&vbCr&_
' "<Cancel> - вызов Ассистента с клавишным набором хоста"&vbCr&vbCr, _
' vbOKCancel+vbQuestion, "Варианты старта RemAs")=vbOK Then giUnsolicited = 1
Dim gs_OriginalFiles, gs_CustomFiles, gs_LocalWindir, gs_RemoteWindir
gs_OriginalFiles = "Unsolicited_Remote_Assistance_1\Data\Original"
gs_CustomFiles = "Unsolicited_Remote_Assistance_1\Data\Custom"
'--- определение системных каталогов своей и удаленной Windows'
GetDrive "."
'--- копируем в свою системн.директорию с заменой содержимого (прописывается имя удален.машины) файл Data\Custom\UnSolicitedRCUI.htm'
If giUnsolicited Then
'Opening custom UnSolicitedRCUI.htm and reading the file into a variable so we can customize the file.
Dim objFile, strText, strNewText
Set objFile = fso.OpenTextFile(CurDir & "\" & gs_CustomFiles & "\UnSolicitedRCUI.htm", 1)
strText = objFile.ReadAll
objFile.Close
'Modifying the contents of the file so that it includes the desired host name.
strNewText = Replace(strText, "idComputerName.value = ""CHANGEME"";", "idComputerName.value =""" & sComp & """;")
'Writing the modified, custom UnSolicitedRCUI.htm to the local machine.
Set objFile = fso.OpenTextFile(gs_LocalWindir & "\PCHealth\HelpCtr\Vendors\CN=Microsoft Corporation,L=Redmond,S=Washington,C=US\Remote Assistance\Escalation\Unsolicited\UnSolicitedRCUI.htm", 2, True)
objFile.Write strNewText
objFile.Close
Set objFile = Nothing
If giDebug Then FuncAppendOneStrToTXTFile "run_RemAs.log", "Write local file UnSolicitedRCUI.htm"
End IF
oShell.Run _
"iexplore.exe hcp://CN=Microsoft Corporation,L=Redmond,S=Washington,C=US/Remote Assistance/Escalation/Unsolicited/Unsolicitedrcui.htm", 1
Dim sAppTitle
sAppTitle = "Help and Support Center"
Dim ret
'Если процесс имеет видимое окно - то Ret после вызова нижележащей строки
'получит значение больше нуля. Если меньше нуля - значит процесс или не имеет окон
'или все окна у него невидимы
If giDebug Then FuncAppendOneStrToTXTFile "run_RemAs.log", "PC: " & sComp
ret = 0
ret = oShell.AppActivate (sAppTitle)
'-- делаем еще несколько полусекундных пауз, чтобы приложение таки успело запуститься
Dim iSecAll, iSecWait, i, lTmp
iSecAll = 20000 'всего отводим на попытку активации окна - 20сек
iSecWait = 500 'время простоя
i = 0 ' признак необходимости продолжения попыток переключения в окно
While i=0
WScript.Sleep iSecWait
iSecAll = iSecAll - iSecWait
ret = oShell.AppActivate (sAppTitle)
If giDebug Then FuncAppendOneStrToTXTFile "run_RemAs.log", "Sleep: " & iSecWait & ", iSecAll: " & iSecAll & ", ret: " & ret
' выход из цикла - либо в окно переключились, либо время закончилось
If ret Then
i=1
End IF
If iSecAll<=0 Then
i=1
End IF
WEnd
Set oShell=Nothing
If ret Then 'при наличии успешного переключения - "набираем" имя компа
WScript.Sleep 3000 ' 3 сек. дополнительного ожидания
If giUnsolicited Then 'имя компа набирать не нужно'
If giDebug Then FuncAppendOneStrToTXTFile "run_RemAs.log", "Success activated - " & sAppTitle
else
If giDebug Then FuncAppendOneStrToTXTFile "run_RemAs.log", "start sendkeys..."
Dim oSHL
Set oSHL = WScript.CreateObject("WScript.Shell")
oSHL.SendKeys( sComp )
Set oSHL=Nothing
End IF
else
If giDebug Then FuncAppendOneStrToTXTFile "run_RemAs.log", "Error activated - " & sAppTitle
MsgBox "Неудачная попытка активации " & _
chr(34)&sAppTitle&chr(34) & vbCrLf , _
vbCritical, "Запуск Помощника"
End IF
'--- заменяем в сист.папке своей машины файл UnSolicitedRCUI.htm на "оригинальные" из Data\Original'
If giUnsolicited Then
'Replacing the custom UnSolicitedRCUI.htm on the local machine with the original that came with the OS.
On Error Resume Next
lTmp = CurDir & "\" & gs_OriginalFiles & "\UnSolicitedRCUI.htm" &" -> "& _
gs_LocalWindir & _
"\PCHealth\HelpCtr\Vendors\CN=Microsoft Corporation,L=Redmond,S=Washington,C=US\Remote Assistance\Escalation\Unsolicited\UnSolicitedRCUI.htm"
fso.CopyFile CurDir & "\" & gs_OriginalFiles & "\UnSolicitedRCUI.htm", _
gs_LocalWindir & _
"\PCHealth\HelpCtr\Vendors\CN=Microsoft Corporation,L=Redmond,S=Washington,C=US\Remote Assistance\Escalation\Unsolicited\UnSolicitedRCUI.htm",True
If Err.Number <> 0 Then
MsgBox "Ошибка выполнения команды `" & lTmp & "`!" & vbCR & vbCR &_
"Ошибка: [ " & Err.Description & " ]" & vbCR & vbCR, vbCritical, "Error CopyFile"
On Error GoTo 0
If giDebug Then FuncAppendOneStrToTXTFile "run_RemAs.log", "-!- failure Restore local file UnSolicitedRCUI.htm"
else
On Error GoTo 0
If giDebug Then FuncAppendOneStrToTXTFile "run_RemAs.log", "Restore local file UnSolicitedRCUI.htm"
End IF
End IF
End IF ' iPos>0 Then ' Windows 7 !!!!''
else
MsgBox "Goodbye!"
End IF ' (sComp<>"")
If giDebug Then FuncAppendOneStrToTXTFile "run_RemAs.log", "---- End: " & Now()
If giDebug Then FuncAppendOneStrToTXTFile "run_RemAs.log", vbCrLf
Set fso = Nothing
'----------------функция----------------------------------------
'добавляет строчку в текстовый файл
Function FuncAppendOneStrToTXTFile(FileName, StrText)
'------------------------Константы для задания типа открытия файла
Const ForReading = 1, ForWriting = 2, ForAppending = 8, OverwriteTrue = True, OverwriteFalse = False
' Объявляем переменные
Dim objFSO, FOut
' Создаем объект FileSystemObject
Set objFSO=WScript.CreateObject("Scripting.FileSystemObject")
' Открываем выходной файл для записи
Set FOut = objFSO.OpenTextFile (FileName,ForAppending,true)
' Записываем текстовую строку в файл
FOut.WriteLine StrText' & vbcrlf
' Закрываем выходной файл
FOut.Close
FuncAppendOneStrToTXTFile = true
Set objFSO = Nothing
Set FOut = Nothing
End Function
'***************************************************************
'Get the local windows folder.
'From: Unsolicited Remote Assistance version 1.1_RD - 11/20/07'
Function GetDrive(sComputer)
Dim oWMIService, colItems, oItem
Set oWMIService = GetObject("winmgmts:\\" & sComputer & "\root\CIMV2")
Set colItems = oWMIService.ExecQuery("SELECT SystemDrive, WindowsDirectory FROM Win32_OperatingSystem")
For Each oItem In colItems
GetDrive = oItem.SystemDrive
If sComputer = "." Then
gs_LocalWindir = oItem.WindowsDirectory
Else
gs_RemoteWindir = replace(oItem.WindowsDirectory,":","$")
End if
Next
Set oWMIService = Nothing
Set colItems = Nothing
End Function
Конфигурационный run_RemAs.ini (наличие опционально - для включения/выключения режима отладки):
// 0 - обычный режим (default), 1 - отладочный
// В отдладочном режиме формируется .LOG с информацией о временных задержках запуска приложения
debug=0
Свой run_RemAs.vbs также запускаю из своей прожки с передачей параметром имени/айпи подключаемой машины.
Один и тот же скрипт используется и на ХР-системах и на Win-7, под ХР было реализовано два варианта передачи имени машины: с набором строки в окне ассистента (т.к. называемый в скрипте - "обычный режим") и режим модификации у себя файла помощника - внесением имени удаленной машины (giUnsolicited = 1 ' 1-режим подмены своего "UnSolicitedRCUI.htm"). И режим с модификацией за полгода усиленной:) эксплуатации себя не подвел, т.е. "обычный" режим в принципе из скрипта можно и убрать.
Перед использованием скрипта на ХР-системе надо в каталоге задачи создать подкаталоги:
1) Unsolicited_Remote_Assistance_1\Data\Original
2) Unsolicited_Remote_Assistance_1\Data\Custom
И сделать в них копии файла %windir%\PCHealth\HelpCtr\Vendors\CN=Microsoft Corporation,L=Redmond,S=Washington,C=US\Remote Assistance\Escalation\Unsolicited\UnSolicitedRCUI.htm
Прошу учесть, что определение версии своей ОС реализован вызовом "%comspec% /c ver" и последующим поиском выражения "Version 6." - а этот примитивный способ, конечно же, зависит от версии RUS/ENG системы, но т.к. у меня все системы - ENG, то переделывать на WMI-запрос мне не было нужды.
WBR. Roman