【问题标题】:I need to add multiple printers to multiple print servers with Powershell and a single .csv file我需要使用 Powershell 和单个 .csv 文件将多台打印机添加到多个打印服务器
【发布时间】:2017-11-06 06:14:22
【问题描述】:

我有一个脚本,它将针对打印机列表以及列出的打印服务器的 Excel 文件运行。

我想不通的问题是如何在没有 200 行的 Excel 工作表的情况下将多台打印机添加到多台打印服务器。

我希望在 Powershell 脚本中列出打印服务器,并让 foreach 命令动态遍历每个列出的服务器。

这是我到目前为止的代码。我试图让$server 能够拥有服务器列表并将函数中的部分更改为列表中的下一个服务器。 我附上了 .csv 格式的示例。 example of the formatting of the .csv file 感谢任何人提供的任何帮助。

function CreatePrinter {
    $server = $args[0]
    $print = ([WMICLASS]"\\$server\ROOT\cimv2:Win32_Printer").createInstance() 
    $print.drivername = $args[1]
    $print.PortName = $args[2]
    $print.Shared = $false
    $print.Sharename = $args[3]
    $print.Location = $args[4]
    $print.Comment = $args[5]
    $print.DeviceID = $args[6]
    $print.Put() 
}

function CreatePrinterPort {
    $server =  $args[0] 
    $port = ([WMICLASS]"\\$server\ROOT\cimv2:Win32_TCPIPPrinterPort").createInstance()
    $port.Name= $args[1]
    $port.SNMPEnabled=$false 
    $port.Protocol=1 
    $port.HostAddress= $args[2]
    $port.Put() 
}

$printers = Import-Csv C:\test\NewPrinters.csv

foreach ($printer in $printers) {
    CreatePrinterPort $printer.Printserver $printer.Portname $printer.IPAddress
    CreatePrinter $printer.Printserver $printer.Driver $printer.Portname 
    $printer.Sharename $printer.Location $printer.Comment $printer.Printername
}

【问题讨论】:

    标签: powershell printing server import-csv


    【解决方案1】:

    当您可以使用现有命令进行打印机管理时,无需重新发明轮子。

    Add-PrinterPortAdd-Printer 会是你想要的:

    foreach ($printer in $printers) {
        Add-PrinterPort -ComputerName $printer.Printserver -Name $printer.Portname -PrinterHostAddress $printer.IPAddress
        Add-Printer -ComputerName $printer.Printserver -Name $printer.Printername -DriverName $printer.Driver -Shared -ShareName $printer.Sharename -PortName $printer.Portname -Comment $printer.Comment -Location $printer.Location
    }
    

    编辑:

    对于多台服务器:

    $servers = "printserver01","printserver02","printserver03"
    
    foreach ($server in $servers) {
        foreach ($printer in $printers) {
            Add-PrinterPort -ComputerName $server -Name $printer.Portname -PrinterHostAddress $printer.IPAddress
            Add-Printer -ComputerName $server -Name $printer.Printername -DriverName $printer.Driver -Shared -ShareName $printer.Sharename -PortName $printer.Portname -Comment $printer.Comment -Location $printer.Location
        }
    }
    

    【讨论】:

    • 感谢您的回复。我如何能够针对服务器列表和打印机列表运行它?
    • 它已经可以做到这一点,只需相应地更新您的 CSV...在Printserver 列下添加您的服务器,并按照其他列添加打印机,如果您需要在多个服务器上使用相同的打印机,只需复制该行并将 Printserver 更改为下一个服务器名称。
    • 这就是我当前脚本的工作方式。您的代码更简单、更美观。我试图避免使用大型 Excel 工作表。我必须在 8 台打印服务器上添加大约 100 台打印机。所以 excel 表将是 800 行长哈哈哈。我试图让它有一个服务器列表,然后是一个具有打印机属性的 100 台打印机的列表,以避免在 Excel 表上出现 800 行。
    • Dang...我在 Windows 7 计算机上,无法在 Windows 7 计算机上加载 PrintManagement 模块。
    • 我已更新我的答案,将打印机添加到多个服务器,而不会出现重复条目​​。 PrintManagement 模块是在 Windows 8 和 Server 2012(及更新版本)中引入的,如果你有一台机器,其中任何一个都很好,如果没有,你可以用你的替换这两个命令,两个 foreach 循环将功能相同。
    【解决方案2】:

    也无需说对不起...您抽出一天的时间来回答一些随机的家伙的问题。这就是我的最终脚本的样子,它可以在 Windows Server 2012 上完美运行。

    foreach ($server in @("Printserver1","Printserver2","Printserver3")) {
       foreach ($printer in @(Import-Csv C:\PrinterList.csv)) {
          Add-PrinterPort -ComputerName $server -Name $printer.IPAddress -PrinterHostAddress $printer.IPAddress
          Add-Printer -ComputerName $server -Name $printer.Printername -DriverName $printer.Driver -PortName $printer.IPAddress -Comment $printer.Comment -Location $printer.Location
       }
    }
    

    -尼克-

    【讨论】:

      猜你喜欢
      • 2019-07-22
      • 1970-01-01
      • 2021-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-03
      相关资源
      最近更新 更多