我们设置了一个新的 64 位打印服务器(Server 2008 R2),在我们之前的打印服务器上,我们将帮助台作为高级用户组的成员,并为他们提供“管理员打印机”,以便他们可以在打印机出现故障时更改打印机端口。
看起来好像有一个疏忽,我们在设置新服务器时没有添加它。
我已将它们添加到高级用户,并进入“PRINTMANAGEMENT.MSC”中的打印服务器属性并授予权限,但这似乎仅适用于新打印机,因为它似乎不会继承到任何现有打印机。
有没有办法获得这些权限以传播到现有的打印机?
这些被设置为本地打印机,绑定到标准 TCP / IP 端口。
答案1
我偶然发现了这个问题,意识到我从来没有发布过我所做的事情,最终我找到了一种使用 SUBINACL.exe 的方法(需要位于 System32 之类的路径目录中)
并将其通过 powershell 循环传递到所有打印机
这是代码,以管理员身份从打印服务器上的 PS 控制台运行它
$Logpath = "c:\temp\logs"
Stop-Transcript -ErrorAction "SilentlyContinue"
Start-Transcript $Logpath -Append
$PRINTERS = (Get-WmiObject Win32_Printer)
foreach($PRINTER in $PRINTERS)
{$Server = $PRINTER.SystemName
$PrinterName = $PRINTER.name
Write-Host \\$Server\$PrinterName
Invoke-Command -AllowRedirection {subinacl.exe /printer \\$Server\$PrinterName /Grant=domain\username=F}
}
Stop-Transcript
我不再在那里工作了,但我希望有人能从中受益。
答案2
我知道这不是将安全权限应用于所有打印机的方法,但它可能会解决您的问题。
打印机的默认权限通常似乎包括分配给域组“打印操作员”的管理权限。考虑将您的帮助台组添加到“打印操作员”。
此外,似乎有一组全局权限,可以允许将设置应用于“打印服务器属性”下的所有打印机,可以通过右键单击“打印服务器”的名称来访问printmanagement.msc
。
注意:我之前没有使用过打印服务器属性 acl,所以我无法说它是否按照您想要的方式工作。
答案3
当我运行这个程序时,它似乎正在提取服务器名称和打印机名称,但在运行命令时出错--
\[打印服务器名称][打印机名称] Invoke-Command:无法评估参数“ConnectionUri”,因为其参数被指定为脚本块,并且没有输入。没有输入,就无法评估脚本块。在 C:\ntutils\utils\Subinacl7.ps1:13 char:15 + Invoke-Command <<<< -AllowRedirection {c:\ntutils\utils\subinacl.exe /printer http://$Server/$PrinterName /Grant=ter minalserver\ManagePrintQueues=M} + CategoryInfo:MetadataError: (:) [Invoke-Command],ParameterBindingException + FullyQualifiedErrorId:ScriptBlockArgumentNoInput,Microsoft.PowerShell.Commands.InvokeCommandCommand
答案4
这个问题困扰了我一段时间,在这篇帖子的帮助下,我找到了我需要的答案。正如 Mike 指出的那样,脚本给了我错误,我尝试修改它,但没有成功。最后我直接使用了老好的 CMD。
首先,我得到了打印机列表。
Get-WmiObject Win32_Printer | Select-Object -Property Name
其次,我将结果与命令一起粘贴到 Excel 中。
第三,我将其复制到 Notepad++ 中并清理空格。
最后粘贴到CMD并运行。
看起来很多,但我只花了 10 分钟。抱歉,没有清理干净!希望有帮助!