“用于Mac的远程桌面连接”的命令行参数?


19

我还找不到任何文档来表明这是可能的,但是有什么方法可以将您想连接的主机名作为命令行参数传递给Microsoft的Mac远程桌面连接吗?

一些有兴趣的背景信息:

我是系统管理员,目前正在从Windows 7笔记本电脑迁移到MacBook Air作为我的主要工作计算机。我经常使用远程桌面客户端连接服务器,在Windows中,我使用Launchy作为键盘启动器。我已将“ rdp”指定为关键字,因此当我调用Launchy时,键入“ rdp {tab}服务器名”会将Tab键后的文本作为主机名传递给mstsc.exe(即mstsc.exe / v:servername) 。这导致远程桌面客户端打开与指定主机名的会话。


2
遗憾的是,没有对远程桌面客户端的命令行访问或AppleScript访问。我问过CoRD开发人员是否会考虑将其添加到CoRD中。我的插件是一个比MS RDP客户端更好的客户端:cord.sourceforge.net。:)
Ian C.

@Ian C.,我过去在我的个人MacBook上使用过CoRD ...感觉好像已经有几年了。与Microsoft客户端的稳定性和更“光滑”的外观相比,它并不真正满意。我实际上只是再次下载了它,因为我在他们的一个屏幕截图中注意到,提到了处理rdp://链接。这正是我要寻找的,因此感谢您将我引回到CoRD!我能够在Alfred中设置一个执行“ open rdp:// {query}”的“ shell脚本”扩展。干杯!
Billc 2012年

哇哦 我什至没有注意到它处理了rdp://链接。棒极了。我将其评论作为答案。:)
Ian C.

Answers:


11

Microsoft远程桌面客户端没有命令行访问权限。但是免费的,最出色的CoRD远程桌面客户端可以处理rdp://链接,使您可以从选定的启动器甚至通过open命令行调用它。

github上的CoRD文档列出了如何使用URL编码的参数来打开完整配置的RDP会话。

rdp:// URL语法

CoRD处理rdp:// URL,您可以在OS X的许多地方使用它。不幸的是,无法扩展Finder的“连接到服务器”对话框,该对话框支持启动VNC URL,因此我们无法从那里启动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]设置屏幕深度-width设置屏幕分辨率width -height设置屏幕分辨率高度

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

注意事项

通过这种方式从命令行启动CoRD会导致打开一个新的CoRD实例。一个症状是多个Dock图标。这会覆盖或降低许多CoRD优势(包括统一会话等)的有效性。因此,我们建议使用open命令和rdp:// URL来启动会话。

在此处输入图片说明


1
太搞笑了!当您也回答我自己的问题时。再次感谢你的帮助!
billc 2012年

根据CoRD GitHub页面,此项目将于2015
。– kenorb

可怜。这很好。
伊恩·C(

这个答案已经过时:Mac的Microsoft Remote Desktop的较新版本支持rdp://链接(尽管使用了不同的方案)。参见杰克·道格拉斯的回答。
chrstphrchvz

7

我不喜欢CoRD。它可以工作,但是似乎定期剥落。我为Microsoft RDP制作了自己的CLI脚本。我创建了sed + open bash脚本,以便可以将2个参数传递给Microsoft远程桌面客户端。我可以传递主机名,也可以抛出一个开关以连接到Server 2003主机的控制台。

我知道这可以采取进一步措施。例如:

  • 我的bash脚本无法在路径或文件名中使用空格:)
  • 我想可以用sed修改.RDP文件中的任何XML数据。
  • 我包括了许多用于连接到控制台的开关的变体,因为我很老,并且永远不记得自己喜欢哪一个。我敢打赌,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远程桌面使用URI方案rdp:// query_string来存储在启动客户端时使用的预配置属性设置。查询字符串表示URL中提供的一个或一组RDP属性。RDP属性由与号(&)分隔。

例如,连接到PC时,字符串为:

rdp:// full%20address = s:mypc:3389&audiomode = i:2&disable%20themes = i:1

所有属性都记录在“ 远程桌面客户端URI方案支持 TechNet”页上。


我希望提供一些示例URL。我将本地端口3389转发到Windows计算机,并使用“ Microsoft”用户使用官方的Microsoft远程桌面应用程序进行连接。但是,我无法构造不会出错的URL。
布鲁诺·布罗诺斯基

尝试使用127.0.0.2代替localhost?

1
对如何存储/传递密码有什么想法?
Bruno Bronosky '16

1
我目前正在将密码保存在Microsoft远程桌面(适用于Mac)应用程序中。但是,我的目标是在通过ssh隧道打开新IP:Port的端口后,通过命令行启动与该IP:Port的连接。我正在尝试改善当前以“现在将已保存的连接的主机更改为10.10.1.23:5589并进行连接”结尾的脚本
Bruno Bronosky

1
如果您找到方法,请告诉我:)

1

好了,在咨询了我的Microsoft TAM之后,我发现无法通过命令行将主机名传递给Microsoft客户端。

另一方面,CoRD实际上可以通过处理rdp://链接来实现我想要的功能。安装CoRD后,如果您键入

open rdp://servername

在Terminal或iTerm2中,它将打开一个与CoRD中的主机服务器名称的会话。

在Mac的长期用户之后才发现它,因此我在Mac上使用Alfred(http://www.alfredapp.com/)作为我的“ Launchy”替代品。我购买了Powerpack for Alfred,它使您可以使用许多扩展,其中之一使它能够启动Shell脚本。因此,我创建了一个shell脚本扩展,为其指定了关键字rdp,将其设置为“ required parameter”,并将脚本设置为:

open rdp://{query}

这使我可以调用alfred,然后输入rdp {tab}服务器名{return}以打开到远程服务器的远程桌面连接会话。


0

上面的脚本不适用于最新的“ Microsoft远程桌面”。用变量引用应用程序是有问题的,因此我对路径进行了硬编码(这与原始示例不同)。我还需要删除'--args'参数,它开始起作用。

open -na /Applications/Microsoft\ Remote\ Desktop.app/Contents/MacOS/Microsoft\ Remote\ Desktop ${rdpTempRDP}

0

因此,这主要是充实其他答案并避免编写脚本漏洞:

(TL; DR:以前可能不是真的,但是Microsoft的RDP现在使用来自动处理.rdp文件open

我已经在RDP GUI中存储了很多配置文件。(顺便说一句,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. 在GUI中选择配置文件
  2. File-> Export创建.rdp文件,注意它将缺少密码信息
  3. (研究.rdp,以了解参数如何与手动rdp://语法相对应)
  4. 只需从命令行输入open文件名.rdp

-1

我认为,为要连接的每台服务器创建一个模板,以及为那些“一生一次”的连接创建一个带有空服务器字段的模板,将同样容易。我只是将它们弹出到一个文件夹中,然后对它们进行命名或编号以使顺序正确。将文件夹拖到扩展坞上,我有一个地方可以单击以获取rdp模板的快速列表,然后单击即可进行连接。或者,我可以使用Command + Space并输入文件名,然后按Enter键运行它。或者您可以输入并安装各种管理应用程序。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.