Active Directory环境下的桌面联网打印机pipe理

现在,我们所有的networking打印机都通过一台Windows服务器进行连接。 打印机然后通过组策略部署到桌面。

但是,如果这台服务器出现故障,联网的打印机将全部“噗”地打印出来,任何人都无法打印。 很显然,某种基于AD的复制将会非常棒 – 拥有一个“热备份”是可以的,但是没有简单的方法来redirect打印作业:除非我们在客户端添加了两台打印机,但是这样做很烦人。我应该使用打印机,“Server1上的主打印机”还是“Server2上的主打印机”? 出于这个原因,我想避免最终用户的解决方法,并希望在上游的某个地方处理它。

思考?

我一直在想这个,并考虑以下几点:

  • 仅为打印服务设置专用VM
  • 克隆此虚拟机并暂停(不要closures)
  • 将克隆复制到备份VM服务器

这涵盖了VM操作系统故障以及VM服务器上的硬件故障(因为我们还没有更复杂的处理故障转移)。 当挂起的虚拟机联机时,恢复时间不到15秒,而且如果我最终得到Nagios或类似的东西,可能会被编写脚本。

“温暖”待机,没有客户端重复。 我想不出有什么大的障碍,但是这给了我一个把理论抛在脑后的机会,看看有没有人能find他们。

集群打印服务器 。

完全和彻底的矫枉过正,但这是你的问题的最佳做法解决scheme!

从这里 :

“我能想到的有三种方法:第一种(集群)方式,我们可以以成本为基础来折扣所有networking,除了最大的networking。

其次是使用Windows Server 2003的networking负载平衡(NLB)function。由于您不具有共享存储,因此Microsoft不build议将其用于打印服务,并且打印队列将会丢失服务器失败。 但是,我认为对于很多人来说,如果打印服务器出现故障时发生的最糟糕的事情是某些用户不得不再次单击“文件|打印”,那么这并不是太大的创伤。 我已经在实验室环境中进行了testing,对我来说这似乎可行。

第三种方法是将第二台打印服务器作为备用机器。 禁用严格的名称cheching,如下面的文章中所述。

连接到基于Windows 2000的计算机或基于Windows Server 2003的计算机上的SMB共享可能无法使用别名http://support.microsoft.com/default.aspx?scid=kb;en-us;281308

然后,将所有机器指向您创build的DNS别名。 最初,这个别名指向主打印服务器。 定期使用Microsoft的PrintMig实用程序备份主打印服务器并还原到备用服务器。 当主打印服务器失败时,将别名重新分配给备用服务器。

在最坏的情况下,用户可能不得不重新启动(或者清除他们的DNScaching),但比打印服务器失败,没有备份和计划要好得多。“

听起来很简单。

  • 为另一台服务器上的打印机创build队列。 (使用PrintMig或其他来复制configuration,也许可以考虑重复执行。)

  • 创build第二组GPO以部署在辅助服务器上排队的打印机。 禁用这些GPO上的链接(或禁用GPO的用户部分)。

  • 如果发生故障,请启用“辅助”打印机部署GPO上的链接。

根据您用于部署打印机的工具,您也可能需要在发生故障的服务器计算机上“取消”部署打印机。

如果您有大量的GPO,请考虑使用脚本来集中启用/禁用function。

这是比我最后两个build议更明智的select。

这是我们用来将用户从打印服务器迁移到打印服务器的脚本。 它也将保留他们的默认打印机的select。

如果最糟糕的事情发生了,你可以从现有的login脚本中调用这个脚本,并要求你的用户重新启动他们的机器/注销和login。

您当然需要首先启动备份打印服务器,并且需要确保新服务器上的所有打印队列已经准备好,并且具有相同的打印队列名称。

这里是:

Option Explicit 'On Error Resume Next' MigratePrint "\\svr-print-01.yourdomain.loc", "\\svr-print-02.yourdomain.loc" Function MigratePrint(strOldServer, strNewServer) Dim strComputer Dim strShareName Dim objWMIService Dim objPrinter Dim objItem Dim colItems Dim WshNetwork Dim objshell strComputer = "." Set WshNetwork = WScript.CreateObject("WScript.Network") Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") Set colItems = objWMIService.ExecQuery("Select * from Win32_Printer",,48) For Each objItem in colItems If objItem.ServerName = strOldServer Then If objItem.Default = "True" Then strShareName = objItem.ShareName End If WshNetwork.RemovePrinterConnection objItem.ServerName & "\" & objItem.ShareName, True, True WshNetwork.AddWindowsPrinterConnection strNewServer & "\" & objItem.Sharename End If Next Set objPrinter = CreateObject("WScript.Network") objPrinter.SetDefaultPrinter (strNewServer & "\" & strShareName) End Function