RemoteApps适用于非域名客户端

我希望将远程桌面场的RemoteApps悄悄地添加到Windows 7计算机的RemoteApp和Desktop Connections控制面板。

通过rundll32 tsworkspace订阅由RD Web访问服务器提供的RSS订阅源的一般程序似乎是要走的路,但是所讨论的客户端与RD服务器群不在一个单独的不信任域中 。 而https://rdbroker/RDWeb/FeedLogin/WebFeedlogin.aspx URI需要validation,所以它根本不起作用。

我曾尝试在IIS站点树中为RDWeb/FeedLogin文件夹启用匿名身份validation(使用IUSR应用程序池标识甚至是特权域用户身份),但试图检索该提要返回Server Error in '/RDWeb/FeedLogin' Application. IISlogging一个未处理的NullReferenceexception:

 Event code: 3005 Event message: An unhandled exception has occurred. Event time: 26.05.2014 14:50:08 Event time (UTC): 26.05.2014 12:50:08 Event ID: 66cc347cf8884a4fa0567b5e7c378d61 Event sequence: 4 Event occurrence: 1 Event detail code: 0 Application information: Application domain: /LM/W3SVC/1/ROOT/RDWeb/FeedLogin-6-130455822088289842 Trust level: Full Application Virtual Path: /RDWeb/FeedLogin Application Path: C:\Windows\Web\RDWeb\FeedLogin\ Machine name: rdbroker Process information: Process ID: 1016 Process name: w3wp.exe Account name: IIS APPPOOL\RDWebAccess Exception information: Exception type: NullReferenceException Exception message: Object reference not set to an instance of an object. Request information: Request URL: https://rdbroker:443/RDWeb/FeedLogin/WebFeedlogin.aspx?ReturnUrl=An unhandled exception has occurred.fRDWebAn unhandled exception has occurred.fFeedAn unhandled exception has occurred.fwebfeed.aspx Request path: /RDWeb/FeedLogin/WebFeedlogin.aspx User host address: 192.168.8.70 User: Is authenticated: False Authentication Type: Thread account name: IIS APPPOOL\RDWebAccess Thread information: Thread ID: 6 Thread account name: IIS APPPOOL\RDWebAccess Is impersonating: False Stack trace: at ASP.webfeedlogin_aspx.Page_Load(Object sender, EventArgs e) at System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) at System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) at System.Web.UI.Control.OnLoad(EventArgs e) at System.Web.UI.Control.LoadRecursive() at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) Custom event details: 

想法?

我最终通过使用AutoITv3脚本自动化tsworkspace对话框来“解决”这个问题。 我已经使用用户的RemoteApp用户名填充了employeeID属性,并使脚本查询该属性,使用它来预填充RemoteApp Web订阅源的安全对话框以及RD客户端本身的UsernameHintregistry值。 因此,在最好的情况下,用户只需要运行可执行文件并将其密码input到预填有用户名的authentication对话框中即可。

脚本在下面。 请注意, WinWait电话正在等待显示特定标题或消息文本的窗口,您将需要根据客户的本地化和Windows版本进行更改。

 #include <AD.au3> Dim $WCXPath = "\\fserver2\RemoteAppFeed$\rdcb.wcx" Dim $FeedAddress = "rdcb.ad.contoso.com" Dim $WizardWinHandle Dim $SecurityWinHandle Dim $CallResult Dim $aProperties[1][2] Dim $UserName $UserName="AD\<YourADLogin>" ; Open Connection to the Active Directory _AD_Open() ; Write UsernameHint values with the user's RD server authentication name $aProperties = _AD_GetObjectProperties(@UserName, "employeeID") ;_ArrayDisplay($aProperties, "Active Directory Functions - Example 2 - Properties for user '" & @UserName & "'") If IsArray($aProperties) Then If UBound($aProperties,2)=2 and UBound($aProperties,1)=2 Then If $aProperties[1][0]="employeeID" and StringLen($aProperties[1][1])>1 Then $UserName = "CIT-AD\" & $aProperties[1][1] RegWrite("HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers\rdfarm.ad.contoso.com", "UsernameHint", "REG_SZ", $UserName) RegWrite("HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers\ts13.ad.contoso.com", "UsernameHint", "REG_SZ", $UserName) EndIf EndIf EndIf Run ("C:\Windows\System32\xwizard.exe RunWizard /u {7940acf8-60ba-4213-a7c3-f3b400ee266d} /z" & $WCXPath) $WizardWinHandle = WinWait("Neue Verbindung mit RemoteApp", $FeedAddress) ;MsgBox(0, "Debug", "RemoteApp Window appeared with handle " & $WizardWinHandle) WinActivate($WizardWinHandle) $CallResult = ControlClick($WizardWinHandle, "", "Button1") ;MsgBox(0, "Debug", "Clicked "Next" with result" & $CallResult) $SecurityWinHandle = WinWait("Windows-Sicherheit") ;MsgBox(0, "Debug", "Windows Security Window appeared with handle " & $SecurityWinHandle) WinActivate($SecurityWinHandle) $CallResult = ControlSend($SecurityWinHandle, "", "Edit1", $UserName) ;MsgBox(0, "Debug", "Sent username data with result" & $CallResult) $CallResult = ControlClick($SecurityWinHandle, "", "Button1") ;MsgBox(0, "Debug", "Clicked to remember credentials with result" & $CallResult) $CallResult = ControlFocus($SecurityWinHandle, "", "Edit2") ;MsgBox(0, "Debug", "Focused password field with result" & $CallResult)