Powershell 从导入的csv文件到多个打印服务器创建打印机

Powershell 从导入的csv文件到多个打印服务器创建打印机,powershell,printing,Powershell,Printing,我一直在使用这个脚本,并已成功地从.csv文件中获取信息,并将其添加到一个打印服务器 现在,我在脚本中硬编码了打印服务器,它允许我在脚本中添加多个打印服务器,但我想将打印服务器添加到.csv文件中的一列,并从中读取,以消除代码中的静态服务器。以下是我所拥有的: 我正在努力解决的第二个问题是发布和不发布打印机(是否在广告中列出),我正在考虑添加另一个名为published的专栏。然后创建一个if/Then来发布或不发布** foreach ($server in @("printserver1")

我一直在使用这个脚本,并已成功地从.csv文件中获取信息,并将其添加到一个打印服务器

现在,我在脚本中硬编码了打印服务器,它允许我在脚本中添加多个打印服务器,但我想将打印服务器添加到.csv文件中的一列,并从中读取,以消除代码中的静态服务器。以下是我所拥有的:

我正在努力解决的第二个问题是发布和不发布打印机(是否在广告中列出),我正在考虑添加另一个名为published的专栏。然后创建一个if/Then来发布或不发布**

foreach ($server in @("printserver1")) {
    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 -Shared -ShareName $printer.Printername -Published
    }
}

如果
PrinterList.csv
包含一个名为
Publish
的列,其中包含
False
True
作为可能的值,则可以执行以下操作:

foreach ($printer in (Import-Csv C:\PrinterList.csv)) {
    $Params = @{ ComputerName = $server
                 Name = $printer.Printername
                 DriverName = $printer.Driver
                 PortName = $printer.IPAddress
                 Comment = $printer.Comment
                 Location = $printer.Location
                 ShareName = $printer.Printername
    }
    Add-Printer @Params -Shared -Published:([bool]::Parse($printer.Publish))
}
由于
Publish
是一个
[switch]
参数,因此可以使用语法
-Publish:$true
-Publish:$false
Parse()
方法将字符串值解析为布尔值

$Params
在这里不是必需的。它只是提供了更多的可读性


或者,
[System.Convert]::ToBoolean($printer.Publish)
在建议的场景中具有相同的结果,但提供了与
[System.Convert]::ToBoolean(0)
返回
False
[System.Convert]::ToBoolean(1)更大的灵活性
返回
True

我有一个名为Publish的列,但出现以下错误:调用带有“1”参数的“Parse”时出现异常:“字符串未被识别为有效的布尔值”。第10行char:5+Add Printer@Params-Shared-Published:([bool]::Parse($printer.Pu…+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~类别信息:未指定:(:)[],MethodInvocationException+FullyQualifiedErrorId:FormatException您能告诉我发布列中有哪些值吗?它必须是
True
False
,才能像现在一样工作。我将它作为csv文件中的最后一列。该列名为Publish,现在我在其中有True。如果有关系,请全部小写完全正确。我也在使用您提供给我的原始脚本(谢谢!),我不确定是否需要添加任何其他内容。我知道您提到了-publish:$true和$false它应该适用于任何情况。您能告诉我您使用的是哪个PowerShell版本吗?