我需要使用 Powershell 和单个 .csv 文件将多台打印机添加到多台打印服务器
I need to add multiple printers to multiple print servers with Powershell and a single .csv file
我有一个脚本,可以 运行 针对打印机列表以及列出的打印服务器的 Excel 文件。
我无法弄清楚的问题是如何在没有 200 行的 Excel sheet 的情况下将多台打印机添加到多台打印服务器。
我希望在 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
}
无需重新发明轮子,即可使用现有命令管理打印机。
Add-PrinterPort
和 Add-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
}
}
也无需说对不起...您抽出时间来回答某个随机家伙的问题。这是我的最终脚本的样子,它在 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
}
}
-尼克-
我有一个脚本,可以 运行 针对打印机列表以及列出的打印服务器的 Excel 文件。
我无法弄清楚的问题是如何在没有 200 行的 Excel sheet 的情况下将多台打印机添加到多台打印服务器。
我希望在 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
}
无需重新发明轮子,即可使用现有命令管理打印机。
Add-PrinterPort
和 Add-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
}
}
也无需说对不起...您抽出时间来回答某个随机家伙的问题。这是我的最终脚本的样子,它在 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
}
}
-尼克-