Назад | Перейти на главную страницу

Повторный заказ подключений к удаленному рабочему столу

У меня установлен adminpak.msi, так что я могу использовать MMC удаленного рабочего стола для подключения ко всем моим серверам. Когда я добавляю сервер, он идет в конец списка доступных серверов. Я не могу понять, как переупорядочить их в более логические группы или хотя бы в алфавитном порядке. Любые идеи?

Королевский ТС может помочь вам управлять / организовывать подключения к удаленному рабочему столу. Также Терминалы может сделать нечто подобное. Альтернативой может быть создание ярлыков удаленного рабочего стола для каждого подключения и сохранение их в папке, где они могут быть отсортированы по имени.

Я настоятельно рекомендую бесплатное приложение, которое я использую последние несколько недель (и я никаким другим образом не связан), которое называется Вкладки RD (по Птичьи волны). Инструмент очень гибкий, позволяя создавать несколько панелей, каждая из которых содержит несколько вкладок, с быстрым доступом к предварительному просмотру эскизов, сочетаниями клавиш практически для каждой функции (отлично подходит для людей, которые не любят, когда их заставляют использовать мышь), и даже командная строка / скрипт автоматизации инструмента. Сортировка и группировка включают не что иное, как перетаскивание, и вы можете легко импортировать существующие файлы конфигурации удаленного рабочего стола.

Я нашел решение. Похоже, что в файле msc есть зашифрованная область, которая просто недоступна. Итак, я нашел сценарий Бретта Кларка в http://twistingthewick.org. Я немного изменил его, чтобы добавить структуру и информацию для входа. Он использует нашего старого друга SendKeys.

Вам необходимо создать CSV с:

имя-сервера-или-ip, описание, идентификатор пользователя, домен

по одному на строку для каждого сервера. Вам нужно будет отсортировать это так, как вы хотите.

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

---, какое-то имя ,,

какое-то имя не используется; каждый раздел называется «Удаленные рабочие столы». Если кто-нибудь придумает, как изменить имя, дайте мне знать.

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

Да, и это, вероятно, не будет работать в Vista или Windows 7, поскольку метод SendKeys был отключен в целях безопасности.

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

Однако сначала вам нужно начать с пустого файла tsmmc.msc. Откройте MMC и добавьте оснастку «Удаленные рабочие столы». Сценарий хочет, чтобы он назывался blanktsmmc.msc в c: \ Projects \ SortMmc. Конечно, вам потребуется загрузить Windows Admin Pak.

Скрипт утилитарный, рассчитан на скорость написания кода, а не на элегантность. Если вносите улучшения, поделитесь пожалуйста.

И я здесь новенький. Если тебе это нравится, я мог бы использовать немного Кармы!

' CreateTSMMC.vbs
' Script to re-create tsmmc entries in order
' Author: Brett Clarke http://twistingthewick.org
' Version: 0.1 – 21/06/2007
'
' Updated by Brian Travis, adding login and drive info
' Version: 0.2 - 2009-08-26
'———————————————————————

'Declare some variables
Option Explicit
Const ForReading = 1
Dim objShell, objFSO, objFileCopy, objDictionary, objTextFile
Dim strBlankMMC, strWorkingMMC, strTemplate, strNextLine
Dim arrRDPList
Set objShell = CreateObject("WScript.Shell")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objDictionary = CreateObject("Scripting.Dictionary")
strBlankMMC = "c:\Projects\SortTsmmc\blanktsmmc.msc"
strWorkingMMC = "c:\windows\system32\tsmmc.msc"
strTemplate = "c:\Projects\SortTsmmc\tsmmc.csv"
Set objFileCopy = objFSO.GetFile(strBlankMMC)
Set objTextFile = objFSO.OpenTextFile (strTemplate, ForReading)

' copy the blank template file over the working file
objFileCopy.Copy (strWorkingMMC)

' start up MMC
objShell.Run "c:\windows\system32\tsmmc.msc"

' wait for the app to start
Wscript.Sleep 1500

' get to the plugin
objShell.SendKeys "{DOWN}"

' read the CSV file, and parse the entries into the MMC session
Do Until objTextFile.AtEndOfStream
    strNextLine = objTextFile.ReadLine
    arrRDPList = Split(strNextLine , ",")

    if arrRDPList(0) = "---" then
        ' create a new group
        objShell.SendKeys "%f"
        objShell.SendKeys "m"
        objShell.SendKeys "%d"
        objShell.SendKeys "rem"
        objShell.SendKeys "%a"
        objShell.SendKeys "%c"
        objShell.SendKeys "{ENTER}"
        objShell.SendKeys "{END}"
    else
        objShell.SendKeys "+{F10}"
        objShell.SendKeys "A"
        objShell.SendKeys arrRDPList(0)
        objShell.SendKeys "{TAB}"
        Wscript.Sleep 100
        objShell.SendKeys "{TAB}"
        Wscript.Sleep 100
        objShell.SendKeys arrRDPList(1)

        Wscript.Sleep 100
        objShell.SendKeys "{TAB}"
        Wscript.Sleep 100
        objShell.SendKeys "{TAB}"
        objShell.SendKeys arrRDPList(2)

        Wscript.Sleep 100
        objShell.SendKeys "{TAB}"

        objShell.SendKeys "{TAB}"
        objShell.SendKeys arrRDPList(3)

        objShell.SendKeys "{TAB}"
        objShell.SendKeys " "

        objShell.SendKeys "{ENTER}"
        Wscript.Sleep 100

        ' turn on drive sharing
        Wscript.Sleep 100
        objShell.SendKeys "{TAB}"
        objShell.SendKeys "{END}"
        objShell.SendKeys "+{F10}"
        objShell.SendKeys "r"
        objShell.SendKeys "+{TAB}"
        objShell.SendKeys "{RIGHT}"
        objShell.SendKeys "{RIGHT}"
        objShell.SendKeys "{TAB}"
        objShell.SendKeys "{TAB}"
        objShell.SendKeys " "
        objShell.SendKeys "{ENTER}"

        ' get back to left column
        objShell.SendKeys "+{TAB}"  
    end if   
Loop

objShell.SendKeys "^s"

WScript.Quit

Не уверен, изменились ли кнопки / поля / параметры (или еще много чего) в моей версии Remote Desktops (v5.2.3790.0), но если у кого-то возникают проблемы с получением v0.1 или v0.2 для сборки RD, вот v0 .3 с моими очень небольшими изменениями, которые, наконец, позволили правильно автоматизировать его на моей машине XP. Надеюсь это поможет.

PREREQS (см. Сообщения v0.1, v0.2 для получения подробной информации о том, как создавать эти файлы):

  • Пустой файл tsmmc.msc в текущем каталоге с именем blanktsmmc.msc.

  • tsmmc.csv в текущем каталоге в соответствующем формате.

Пример CSV-файла, разбитого на разделы:

    ---[AGENTS]---,,,
    agent-pc,,neo,thematrix
    agentsmith-pc,,neo,thematrix
    ---,,,
    ---[THEMATRIX]---,,,
    merovingian-pc,,neo,thematrix
    theoracle-pc,,neo,thematrix
    thesource-pc,,neo,thematrix
    ---,,,
    ---[ZION]---,,,
    cypher-lt,,neo,thematrix
    morpheus-pc,,neo,thematrix
    tank-lt,,neo,thematrix
    trinity-pc,,neo,thematrix

Пересмотренный код v0.3:

' CreateTSMMC.vbs
' Script to re-create tsmmc entries in order
' Author: Brett Clarke http://twistingthewick.org
' Version: 0.1 – 21/06/2007
'
' Updated by Brian Travis, adding login and drive info
' Version: 0.2 - 2009-08-26
'
' Updated by Jack Hamilton, to make it work in Remote Desktops v5.2.3790.0
' Version: 0.3 - 2012-08-15
'
' NOTES: 
' (1) If you get subscript out of range error, check your CSV for any blank lines 
' or lines with too many commas and fix/delete them.
'
' (2) Be sure to close all programs before running, especially those like email
' or instant messaging that can pop up a notification window causing the 
' window focus to change and thereby interrupt the automation process.
'———————————————————————

'Declare some variables
Option Explicit
Const ForReading = 1
Const Sleep_Long_Pause = 1500
Const Sleep_Between_Keys = 200
Dim objShell, objFSO, objFileCopy, objDictionary, objTextFile
Dim strBlankMMC, strWorkingMMC, strTemplate, strNextLine
Dim arrRDPList
Set objShell = CreateObject("WScript.Shell")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objDictionary = CreateObject("Scripting.Dictionary")
strBlankMMC = ".\blanktsmmc.msc"
strWorkingMMC = "c:\windows\system32\tsmmc.msc"
strTemplate = ".\tsmmc.csv"
Set objFileCopy = objFSO.GetFile(strBlankMMC)
Set objTextFile = objFSO.OpenTextFile (strTemplate, ForReading)

' copy the blank template file over the working file
objFileCopy.Copy (strWorkingMMC)

' start up MMC
objShell.Run "c:\windows\system32\tsmmc.msc"

' wait for the app to start
Wscript.Sleep Sleep_Long_Pause

' get to the plugin
objShell.SendKeys "{DOWN}"

' read the CSV file, and parse the entries into the MMC session
Do Until objTextFile.AtEndOfStream
    strNextLine = objTextFile.ReadLine
    arrRDPList = Split(strNextLine , ",")

    if arrRDPList(0) = "---" Then
        Wscript.Sleep Sleep_Between_Keys
        ' create a new group
        objShell.SendKeys "%f"
        Wscript.Sleep Sleep_Between_Keys
        objShell.SendKeys "m"
        Wscript.Sleep Sleep_Between_Keys
        objShell.SendKeys "%d"
        Wscript.Sleep Sleep_Between_Keys
        objShell.SendKeys "rem"
        Wscript.Sleep Sleep_Between_Keys
        objShell.SendKeys "%a"
        Wscript.Sleep Sleep_Between_Keys
        objShell.SendKeys "%c"
        Wscript.Sleep Sleep_Between_Keys
        objShell.SendKeys "{ENTER}"
        Wscript.Sleep Sleep_Between_Keys
        objShell.SendKeys "{END}"
        Wscript.Sleep Sleep_Between_Keys
    Else
        Wscript.Sleep Sleep_Between_Keys
        objShell.SendKeys "+{F10}"
        Wscript.Sleep Sleep_Between_Keys
        ' Add Connection
        objShell.SendKeys "A"
        Wscript.Sleep Sleep_Between_Keys
        ' IP/Hostname
        objShell.SendKeys arrRDPList(0)
        objShell.SendKeys "{TAB}"
        Wscript.Sleep Sleep_Between_Keys
        ' skip Browse button
        objShell.SendKeys "{TAB}"
        Wscript.Sleep Sleep_Between_Keys
        ' Description
        If arrRDPList(1) = "" Then
            objShell.SendKeys arrRDPList(0)
        Else
            objShell.SendKeys arrRDPList(1)
        End If
        Wscript.Sleep Sleep_Between_Keys
        ' Skip "Connect to Console"
        objShell.SendKeys "{TAB}"
        Wscript.Sleep Sleep_Between_Keys
        objShell.SendKeys "{TAB}"
        Wscript.Sleep Sleep_Between_Keys
        ' Username
        objShell.SendKeys arrRDPList(2)
        Wscript.Sleep Sleep_Between_Keys
        objShell.SendKeys "{TAB}"
        Wscript.Sleep Sleep_Between_Keys
        ' Skip Password
        objShell.SendKeys "{TAB}"
        Wscript.Sleep Sleep_Between_Keys
        ' Domain
        objShell.SendKeys arrRDPList(3)
        ' Skip "Save Password"
        objShell.SendKeys "{TAB}"
        Wscript.Sleep Sleep_Between_Keys
        objShell.SendKeys "{TAB}"
        Wscript.Sleep Sleep_Between_Keys
        objShell.SendKeys "{ENTER}"
        Wscript.Sleep Sleep_Between_Keys
    end if   
Loop

' get back to left column
objShell.SendKeys "+{TAB}"  
Wscript.Sleep Sleep_Between_Keys

objShell.SendKeys "^s"

WScript.Quit

К вашему сведению, для всех, кто все еще использует решение Бретта и Брайана, вот моя последняя модификация для удаленных рабочих столов (tsmmc) в Windows 7 (64-разрядная версия, in).

ПРИМЕЧАНИЕ. Файл blanktsmmc больше не нужен. Формат tsmmc.csv, находящийся в том же каталоге, что и сценарий VB, остается тем же, где desc, user, domain являются необязательными (просто оставьте как "server ,,,"). Первая строка каждой группы - это фиктивное имя соединения, используемое только для идентификации группы. --- ,,, отмечает, что необходимо создать новую группу RemoteDesktop:

---[GroupA]---,,,
server,desc,user,domain
server,desc,user,domain
---,,,
---[GroupB]---,,,
server,desc,user,domain
server,desc,user,domain
---,,,
---[GroupC]---,,,
server,desc,user,domain
server,desc,user,domain

' CreateTSMMC.vbs
' Script to re-create tsmmc entries in order
' Author: Brett Clarke http://twistingthewick.org
' Version: 0.1 – 21/06/2007
'
' Updated by Brian Travis, adding login and drive info
' Version: 0.2 - 2009-08-26
'
' Updated by Jack Hamilton, to make it work in Remote Desktops v5.2.3790.0
' Version: 0.3 - 2012-08-15
'
' Updated by Jack Hamilton, to allow more sleep on Remote Desktops launch
' to allow application to get focus before commands executed.
' Version: 0.4 - 2012-12-27
'
' Updated by Jack Hamilton for Windows 7. You cannot 
' overwrite c:\windows\system32\tsmmc.msc, so added step at the end
' where user is prompted to Save As. User can then just execute
' using the new msc filename or create shortcut.
' Version: 0.5 - 2013-01-09
'
' NOTES: 
' (1) If you get subscript out of range error, check your CSV for any blank lines 
' or lines with too many commas and fix/delete them.
'
' (2) Be sure to close all programs before running, especially those like email
' or instant messaging that can pop up a notification window causing the 
' window focus to change and thereby interrupt the automation process.
'
'———————————————————————

'Declare some variables
Option Explicit
Const ForReading = 1
Const Sleep_Long_Pause = 1000
Const Sleep_Between_Keys = 250
Dim objShell, objFSO, objFileCopy, objDictionary, objTextFile
Dim strWorkingMMC, strTemplate, strNextLine
Dim arrRDPList
Set objShell = CreateObject("WScript.Shell")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objDictionary = CreateObject("Scripting.Dictionary")
strWorkingMMC = "c:\windows\system32\tsmmc.msc"
strTemplate = ".\tsmmc.csv"
Set objTextFile = objFSO.OpenTextFile (strTemplate, ForReading)

' start up MMC
objShell.Run strWorkingMMC

' wait for the app to start
' NOTE: We need to have enough time for the 
' Remote Desktops application to launch
' else MANY weird, bad things can happen
' if we don't have focus on the application
' else random commands start getting executed.
' Add more sleeps if app is slow to launch 
' on this particular PC.

Wscript.Sleep (Sleep_Long_Pause * 5)

' get to the plugin
objShell.SendKeys "{DOWN}"

' read the CSV file, and parse the entries into the MMC session
Do Until objTextFile.AtEndOfStream
    strNextLine = objTextFile.ReadLine
    arrRDPList = Split(strNextLine , ",")

    if arrRDPList(0) = "---" Then
        ' create a new group

    ' Open File Menu
        Wscript.Sleep Sleep_Between_Keys
        objShell.SendKeys "%f"

        ' Add/Remove Snap-In
        Wscript.Sleep Sleep_Between_Keys
        objShell.SendKeys "m"

        ' Highlight Remote Desktops Snap-In
        Wscript.Sleep Sleep_Between_Keys
        objShell.SendKeys "Remote Desktops"

            ' Add the highlighted available snap-in on left column
            ' over to the right-column
        Wscript.Sleep Sleep_Between_Keys
        objShell.SendKeys "%a"

            ' Click OK
        Wscript.Sleep Sleep_Between_Keys
        objShell.SendKeys "{ENTER}"

            ' Move to bottom snap-in
        Wscript.Sleep Sleep_Between_Keys
        objShell.SendKeys "{END}"

        ' End create new group

    Else

        ' Create new server connection

        ' Show Menu
        Wscript.Sleep Sleep_Between_Keys
        objShell.SendKeys "+{F10}"

        ' Add Connection
        Wscript.Sleep Sleep_Between_Keys
        objShell.SendKeys "A"

        ' IP/Hostname
        Wscript.Sleep Sleep_Between_Keys
        If arrRDPList(1) = "" Then
            objShell.SendKeys arrRDPList(0)
        Else
            objShell.SendKeys arrRDPList(1)
        End If

            ' Tab
        Wscript.Sleep Sleep_Between_Keys
        objShell.SendKeys "{TAB}"

        ' Username, Domain Info
        Wscript.Sleep Sleep_Between_Keys
        If arrRDPList(3) = "" Then
            ' Just Username, No Domain
            objShell.SendKeys arrRDPList(2)
        Else
                ' Username@Domain
            objShell.SendKeys arrRDPList(2)
            objShell.SendKeys "@"
            objShell.SendKeys arrRDPList(3)
        End If

            ' Tab
        Wscript.Sleep Sleep_Between_Keys
        objShell.SendKeys "{TAB}"

        ' Save Password
        Wscript.Sleep Sleep_Between_Keys
        objShell.SendKeys " "

            ' Tab
        Wscript.Sleep Sleep_Between_Keys
        objShell.SendKeys "{TAB}"

        ' Browse button (skip)
        Wscript.Sleep Sleep_Between_Keys
        objShell.SendKeys "{TAB}"

        ' Description
        Wscript.Sleep Sleep_Between_Keys
        If arrRDPList(1) = "" Then
            objShell.SendKeys arrRDPList(0)
        Else
            objShell.SendKeys arrRDPList(1)
        End If

        ' Skip "Connect to Console (w /admin option)"
        Wscript.Sleep Sleep_Between_Keys
        objShell.SendKeys "{TAB}"

            ' Click OK
        Wscript.Sleep Sleep_Between_Keys
        objShell.SendKeys "{ENTER}"

        ' End create new server connection
    end if   
Loop

' Return to left-side column
Wscript.Sleep Sleep_Between_Keys
objShell.SendKeys "+{TAB}"  


    ' Open File Menu
Wscript.Sleep Sleep_Between_Keys
objShell.SendKeys "%f"

    ' Open Save As to prompt user to save with new name.
Wscript.Sleep Sleep_Between_Keys
objShell.SendKeys "a"

    ' Quit Program    
Wscript.Sleep Sleep_Between_Keys    
WScript.Quit

В tsmmc.msc есть раздел, который можно изменить. Если вы добавите еще один String ID = "#", вы можете связать этот идентификатор с любым String Name = "Name" ID = #