我正在尝试弄清楚这个问题:当用户断开他在 Office 1 中的 RDS(在 Windows Server 2012 R2 上)会话并在 Office 2 中重新连接时,仍然会映射与 Office 1 相关的所有打印机。
第一个想法是使用任务计划程序在触发器“会话重新连接”上运行 powershell 脚本,该脚本查看“clientname”变量并在重新连接后将所有相关打印机添加到该位置。
问题在于:
- 使脚本在刚刚重新连接的特定用户的上下文中运行,而不是在某些管理上下文中运行(尝试使用以 Group DOMAIN\Users 身份运行来解决这个问题,但似乎没有达到预期的效果)
- 当通过任务计划程序运行 PS 脚本时,“clientname”环境变量不可用。似乎它是唯一缺少的变量,但糟糕的是,这正是我在这里需要的变量!
因此,我要么在寻找一种正确解决脚本问题的方法,要么更好的是,当用户从不同位置重新连接终端服务器会话时,是否有已知的最佳实践来处理打印机映射?让纸张出现在遥远的办公室/地点没有多大意义 ;-)
非常感谢。
答案1
不幸的是,我认为最好的选择是有一个脚本,用户可以在重新连接时自行运行。
有几件事会使你很难让某些东西自动执行此操作(有些你已经看到了):
ClientName
是用户级环境变量(对于 RDS 服务器上的每个用户来说都是不同的)。- 计划任务将无法访问用户级环境变量(除非是设置为以特定用户身份运行的特定用户)。
- 如果用户正在登录,则设置为在用户登录时运行的计划任务将会运行,但不会通过重新连接触发(如果用户正在登录,那么您首先就不会遇到这个问题)。
- 在用户上下文中启动的任何进程(例如,如果您有一个在登录时运行并定期检查的 PowerShell 脚本)都会在启动时获得环境的副本,
ClientName
除非重新启动该进程,否则它在重新连接时不会看到任何变化。生成新进程也无济于事,因为子进程将继承其父进程环境的副本。