Аргументы командной строки для «подключения к удаленному рабочему столу для Mac»?

19

Мне не удалось найти какую-либо документацию, которая указала бы, что это возможно, но есть ли способ передать имя хоста, к которому вы хотите подключиться, в качестве аргумента командной строки в Microsoft Remote Desktop Connection для Mac?

Некоторая справочная информация для заинтересованных:

Я системный администратор, и я перехожу на MacBook Air в качестве основного рабочего компьютера с ноутбука с Windows 7. Я часто использую Remote Desktop Client для подключения к серверам, а в Windows я использую Launchy в качестве клавиатуры. Я назначил «rdp» в качестве ключевого слова, поэтому, когда я вызываю Launchy, введите «rdp {tab} имя_сервера», он передает текст после клавиши табуляции в качестве имени хоста в mstsc.exe (то есть, mstsc.exe / v: servername) , В результате клиент удаленного рабочего стола открывает сеанс с указанным именем хоста.

billc
источник
2
К сожалению, нет доступа к командной строке или AppleScript к клиенту удаленного рабочего стола. Я спросил разработчика CoRD, не подумает ли он добавить его в CoRD. И есть мой плагин для лучшего клиента, чем RDP-клиент MS: cord.sourceforge.net . :)
Ян С.
@ Ян С., я использовал CoRD в прошлом, на своем персональном MacBook ... похоже, прошло несколько лет. Не очень доволен этим по сравнению со стабильностью и более «отточенным» видом клиента Microsoft. На самом деле я просто скачал его снова, потому что заметил на одном из их скриншотов упоминание об обработке ссылок rdp: //. Это именно то, что я ищу, так что спасибо, что направили меня назад к CoRD! Мне удалось настроить расширение «shell script» в Alfred, которое выполняет «open rdp: // {query}». Ура!
billc
Ух ты. Я даже не заметил, что он обработал ссылки rdp: //. Это потрясающе. Я сделаю свой комментарий ответом. :)
Ян С.

Ответы:

11

Нет доступа к командной строке для клиента удаленного рабочего стола Microsoft. Но бесплатный и превосходный клиент CoRD для удаленного рабочего стола действительно обрабатывает rdp://ссылки, которые позволят вам вызывать его из программы запуска по вашему выбору или даже через openкомандную строку.

В документации CoRD на github изложено, как можно использовать параметры в кодировке URL для открытия полностью настроенных сеансов RDP.

rdp: // Синтаксис URL

CoRD обрабатывает URL-адреса rdp: //, которые можно использовать во многих местах в OS X. К сожалению, нет возможности расширить диалоговое окно Finder «Подключение к серверу», которое поддерживает запуск URL-адресов VNC, поэтому мы не можем запускать CoRD оттуда , Если Apple изменит это (или если кто-нибудь знает, как его расширить), мы будем рады услышать об этом.

Saved Servers

Если вы хотите использовать rdp://URL-адреса с существующими сохраненными серверами, вы можете (по состоянию на 0.5.3)! Просто используйте метку вместо имени хоста:

open rdp://label

Новые серверы

Из оболочки (используя Терминал):

open rdp://hostname

Дополнительные параметры могут быть использованы для запуска полностью настроенного сеанса через URL:

open rdp://[username[:password]@]hostname[:port][/domain][?parameters]

Следующие параметры могут быть установлены для сеанса через строку запроса (по состоянию на 0.5.2):

  • screenDepth ### [8|16|24|32]
  • screenWidth <width in pixels>
  • screenHeight <height in pixels>
  • consoleSession ### [true|false|yes|no]
  • fullscreen ### [true|false|yes|no]
  • windowDrags ### [true|false|yes|no]
  • drawDesktop ### [true|false|yes|no]
  • windowAnimation ### [true|false|yes|no]
  • themes ### [true|false|yes|no]
  • fontSmoothing ### [true|false|yes|no]
  • forwardDisks ### [true|false|yes|no]
  • forwardPrinters ### [true|false|yes|no]
  • forwardAudio ### [0|1|2]
    • 0 - Forward Audio to the Local Machine (Currently not used since CoRD doesn't present audio)
    • 1 - Leave Audio at the Remote Machine
    • 2 - Disable Audio at both Machines

пример

open rdp://jsmith:securePassword@hostname.bigco.com/BigCoDomain?screendepth###24\&consoleSession###true\&themes###false\&screenWidth###1280\&screenHeight###800

Замечания:

При использовании амперсандов (&) из командной строки их необходимо экранировать обратной косой чертой (). Двоеточие (:) можно использовать вместо амперсандов для того же эффекта, без необходимости экранирования.

Пароли с любыми специальными символами в них, @,:, &, и т. Д. Должны быть закодированы в соответствии с форматом кодирования URL

Использование командной строки

CoRD поддерживает следующие параметры командной строки: -host -port -u -d -p -a [8 | 16 | 24 | 32] установить глубину экрана - ширина установить разрешение экрана ширина - высота установить разрешение экрана высоту

пример

/Applications/CoRD.app/Contents/MacOS/CoRD -host example.com -port 3389 -u username

Предостережения

Запуск CoRD из командной строки таким образом вызывает открытие нового экземпляра CoRD. Одним из симптомов этого является несколько иконок Dock. Это переопределяет или снижает эффективность многих сильных сторон CoRD, включая объединенные сеансы и т. Д. По этой причине мы рекомендуем использовать команду open и URL-адреса rdp: // для запуска сеансов.

введите описание изображения здесь

Ян С.
источник
1
Слишком смешно! Я отвечал на свой вопрос, как вы на него ответили. Еще раз спасибо за помощь!
billc
Согласно странице CoRD GitHub , этот проект больше не поддерживается с 16 августа 2015 года.
kenorb
Жалость. Это было хорошо.
Ян С.
Этот ответ устарел: новые версии Microsoft Remote Desktop для Mac поддерживают rdp://ссылки (хотя и по другой схеме). Смотрите ответ Джека Дугласа.
chrstphrchvz
7

Я не люблю CoRD. Это работает, но, кажется, периодически отслаивается. Я сделал свой собственный CLI-скрипт для Microsoft RDP. Я создал сценарий sed + open bash, чтобы можно было передать 2 аргумента клиенту удаленного рабочего стола Microsoft. Я могу передать имя хоста, и я могу бросить переключатель для подключения к консоли хостов Server 2003.

Я знаю, что это может быть продолжено. Например:

  • Мой bash скрипт не будет работать с пробелами в путях или именах файлов :)
  • Я предполагаю, что любые данные XML в файле .RDP могут быть изменены с помощью sed.
  • Я включил несколько вариантов переключателя для подключения к консоли, потому что я стар и никогда не могу вспомнить, какой мне нравится. Могу поспорить, что bash-скриптинг имеет более элегантное решение, чем я использую.

Вот как я это сделал:

  1. Создайте шаблон профиля Microsoft RDP со всеми вашими предпочтительными настройками. Назовите это 'template.rdp'. Заставьте его подключиться к поддельному серверу. Я использовал имя сервера 'zzxyzyz'. Это используется в команде sed в качестве строки для поиска и замены на реальное имя сервера.
  2. Создайте скрипт bash, чтобы скопировать файл template.rdp в файл temp.rdp, а затем поместите в файл temp.rdp нужное имя хоста, которое передается при вызове скрипта. Я назвал мой bash-скрипт «rdp.sh».
  3. Измените ваш ~ / .bash_profile, добавив псевдоним к rdp.sh
  4. Сделайте исполняемый скрипт bash: chmod + x rdp.sh
  5. Боб твой дядя

Содержание моего скрипта bash :

    #! /bin/bash
rdpTemplateFile='/Users/levi/Dropbox/RDC_Connections/RDS/template.rdp'
rdpTempRDP='/Users/levi/Dropbox/RDC_Connections/RDS/t.rdp'
rdpRunCommand="/Applications/Remote Desktop Connection.app/Contents/MacOS/Remote Desktop Connection"
rdpHost=${1}

if [ "${2}" = "/console" ] ; then
    rdpHost="${rdpHost} /console";
    echo "rdpHost is: " ${rdpHost}
fi

if [ "${2}" = "-console" ] ; then
    rdpHost="${rdpHost} /console";
    echo "rdpHost is: " ${rdpHost}
fi

if [ "${2}" = "-admin" ] ; then
    rdpHost="${rdpHost} /console";
    echo "rdpHost is: " ${rdpHost}
fi

cp -f ${rdpTemplateFile} ${rdpTempRDP}

sed -i '' "s|zzxyzyz|${rdpHost}|g" ${rdpTempRDP}

open -na "${rdpRunCommand}" --args ${rdpTempRDP}

Псевдоним добавлен в .bash_profile
(предполагается, что мой файл сценария rdp.sh находится в моем домашнем каталоге, ~ /)

alias rdp=~/rdp.sh

Сделайте скрипт исполняемым:

sudo chmod +x rdp.sh

Запустите скрипт:
Вот пример, который включает консольный переключатель. Я оставил в скрипте строку отладки, которая показывает, что будет собрано в файле t.rdp.

LeviMAC>rdp MyServer -console
rdpHost is:  MyServer /console
[~/]
LeviMAC>
Леви
источник
Я смог заставить эту концепцию работать, но только после некоторой модификации. Команда, которую я использовал для запуска RDP, былаopen -na "/Applications/Microsoft Remote Desktop.app/Contents/MacOS/Microsoft Remote Desktop" path/to/profile.rdp
Terrabits
6

Я не знаю, когда это изменилось, но клиент удаленного рабочего стола Microsoft теперь обрабатывает ссылки rdp: //:

Microsoft Remote Desktop использует схему URI rdp: // query_string для хранения предварительно настроенных параметров атрибута, которые используются при запуске клиента. Строки запроса представляют один или несколько атрибутов RDP, указанных в URL. Атрибуты RDP разделяются символом амперсанда (&).

Например, при подключении к ПК строка выглядит так:

RDP: //% полный 20address = S: MyPC: 3389 & audiomode = I: 2 & отключить% 20themes = I: 1

Все атрибуты описаны на странице TechNet поддержки схемы URI клиента удаленного рабочего стола .


источник
Я хотел бы увидеть некоторые примеры URL. Мой локальный порт 3389 перенаправлен на компьютер с Windows, и я подключаюсь как пользователь «et» с помощью официального приложения Microsoft Remote Desktop. Но я не могу создать URL, который не выдает ошибку.
Бруно Броноски
Попробуйте использовать 127.0.0.2 вместо localhost?
1
Есть идеи о том, как хранить / передавать пароли?
Бруно Броноски
1
Сохранение пароля в приложении Microsoft Remote Desktop (для Mac) - это то, чем я сейчас занимаюсь. Однако моя цель - запустить соединение с новым IP: портом через командную строку после открытия этого порта через туннель ssh. Я просто пытаюсь улучшить свой сценарий, который в настоящее время заканчивается «Теперь измените хост сохраненного соединения на 10.10.1.23:5589 и подключитесь»
Бруно Броноски,
1
Пожалуйста, дайте мне знать, если вы найдете способ :)
1

Ну, посоветовавшись с Microsoft TAM, я обнаружил, что невозможно передать имя хоста клиенту Microsoft через командную строку.

CoRD, с другой стороны, может действительно делать то, что я хотел бы, обрабатывая ссылки rdp: //. После установки CoRD, если вы наберете

open rdp://servername

в терминале или iTerm2 он откроет сеанс для имени сервера хоста в CoRD.

Я использую Альфреда (http://www.alfredapp.com/) в качестве альтернативы «Launchy» на Mac, только что обнаружив его, будучи давним пользователем Quicksilver. Я купил Powerpack для Alfred, который позволяет вам использовать ряд расширений, одно из которых дает ему возможность запускать сценарии оболочки. Поэтому я создал расширение сценария оболочки, назначил ключевое слово rdp, установил его как «обязательный параметр» и установил сценарий:

open rdp://{query}

Это позволяет мне вызвать alfred и набрать rdp {tab} servername {return}, чтобы открыть сеанс подключения к удаленному рабочему столу на удаленном сервере.

billc
источник
0

Приведенный выше скрипт не работает с последней версией Microsoft Remote Desktop. Ссылка на приложение с переменной была проблематичной, поэтому я жестко запрограммировал путь (который отличается от исходного примера). Мне также нужно было удалить параметр '--args', и он начал работать.

open -na /Applications/Microsoft\ Remote\ Desktop.app/Contents/MacOS/Microsoft\ Remote\ Desktop ${rdpTempRDP}
Уильям Уоллес
источник
0

Так что это в основном для уточнения других ответов и предотвращения взлома скриптов:

(TL; DR: возможно, не было правдой раньше, но RDP от Microsoft теперь автоматически обрабатывает файлы .rdp open)

У меня много профилей, уже хранящихся в графическом интерфейсе RDP. (Кстати, plist ~/Library/Containers/com.microsoft.rdc.mac/Data/Library/Preferences/com.microsoft.rdc.mac.plist, как всегда, plutil -convert xml1 xyz.listдля просмотра человеком)

(Дополнительная ссылка: https://macmule.com/2013/10/22/how-to-create-a-microsoft-remote-desktop-8-connection/ )

Чтобы сделать его командным:

  1. Выберите профиль в графическом интерфейсе
  2. Файл -> Экспорт создает .rdpфайл, отметив, что ему не хватает информации о пароле
  3. (Изучите .rdp, чтобы увидеть, как параметры соответствуют синтаксису rdp: // вручную)
  4. Просто openимя файла.rdp из командной строки
BaseZen
источник
-1

Я думаю, что было бы так же легко создать шаблон для каждого сервера, к которому вы хотите подключиться, а также шаблон с пустым полем сервера для этих соединений «один раз в жизни». Я просто вставляю их в папку и называю их по имени или нумерации, чтобы получить правильный порядок. Перетащите папку в док-станцию, и у меня есть место, по которому я могу щелкнуть, чтобы получить быстрый список шаблонов rdp, которые затем можно одним щелчком мыши подключить. Или я могу Command + пробел и введите имя файла и нажмите Enter, чтобы запустить его. ИЛИ ВЫ МОЖЕТЕ TYPEY TYPEY TYPEY TYPE и установить все виды приложений управления.

Рэнди Трэвис
источник