赢terminal服务器/ RDS – 会话重新连接后的dynamic打印机映射

我试图找出这个问题:当用户断开办公室1中他/她的RDS(在Windows Server 2012 R2)会话并在Office 2中重新连接时,仍然映射与Office 1相关的所有打印机。

第一个想法是使用任务计划程序在触发“会话重新连接”时运行powershell脚本,该脚本查看“clientname”variables,并在重新连接后将所有相关打印机添加到该位置。

问题在于:

  • 使脚本在刚刚重新连接的特定用户的上下文中运行,而不是在某些pipe理上下文中(尝试通过以“组DOMAIN \ Users”运行来解决此问题,但似乎不按需要工作)
  • PS脚本通过任务计划程序运行时,“客户端名称”环境variables不可用。 它似乎是唯一的变数缺失,但是,足够糟糕,那正是我需要在这里的那个!

所以,我要么正在寻找一种方式如何正确地解决脚本问题,或者更好的是,当用户重新连接来自不同位置的terminal服务器会话时,如何处理打印机映射已知最佳实践? 将文件显示在远处的办公室/地点是没有多大意义的;-)

非常感谢。

不幸的是,我认为这里最好的办法是制作一个脚本,用户可以在重新连接时自行运行。

有几件事情让你很难自动地做一些事情(你已经看到了一些):

  1. ClientName是一个用户级别的环境variables(对于RDS服务器上的每个用户都是不同的)。
  2. 计划任务将无法访问用户级环境variables(除了可能为其设置为运行的特定用户)。
  3. 如果用户login,设置为在用户login时运行的计划任务将工作,但不会由重新连接触发(如果用户login,则首先不会出现此问题)。
  4. 在用户上下文中启动的任何进程(例如,如果您有一个在login时运行并定期检查的PowerShell脚本)在启动时获取环境的副本,并且在重新连接时不会在ClientName看到更改,除非进程已重新启动。 产生一个新的进程也无济于事,因为subprocess会inheritance父进程的副本。