0

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

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

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

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

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
}
4

2 回答 2

0

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

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
    }
}
于 2017-11-06T12:35:56.357 回答
0

也无需说对不起...您抽出时间来回答一些随机的家伙的问题。这就是我的最终脚本的样子,它在 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
   }
}

-缺口-

于 2017-11-09T02:28:04.953 回答