我正在尝试使用嵌入CMD.exe代码的powershell自动安装打印机。为了优化代码并减少键入量,我使用了全局变量,这与powershell代码配合使用很好。但是,一旦它用单引号和双引号击中嵌入的CMD.exe代码,全局变量就不再被识别。我试着用单引号或双引号,但还是没有成功。有问题的参数位于第21行开关/r。有什么解决办法吗?
注意:此代码适用于Powershell_v2。
$h = get-content env:computername
$global:portIP1 = "printer01"
$global:portIP2 = "printer02"
if ($h -match 'nhi') {$global:portIP1
$portNumber = "9100"
$computer = $env:COMPUTERNAME
$wmi= [wmiclass]"\$computerrootcimv2:win32_tcpipPrinterPort"
#$wmi.psbase.scope.options.enablePrivileges = $true
$newPort = $wmi.createInstance()
$newPort.hostAddress = $global:portIP1
$newPort.name = $global:portIP1
$newPort.portNumber = $portNumber
$newPort.SNMPEnabled = $True
$newPort.Protocol = 1
$newPort.put()
CMD /C 'printui.exe /if /b "PrinterB&W1" /f "C:inetpubftprootPrdriversHP Universal Print Driverhpcu155u.inf_amd64_neutral_bcdaf832a18b6add/hpcu155u.inf" /r '$global:portIP1' /m "HP Universal Printing PCL 6"'
CMD /C 'printui.exe/y /n"PrinterB&W1', (Write-Host "match found")}
我会在这里使用一个可扩展的(双引号)字符串。然后,你可以把你想要的任何类型的引号放在你想要的地方,它们将被解析为文本:
$global:portIP1 = "printer01"
$global:portIP2 = "printer02"
$command = @"
'printui.exe /if /b "PrinterB&W1" /f "C:inetpubftprootPrdriversHP Universal Print Driverhpcu155u.inf_amd64_neutral_bcdaf832a18b6add/hpcu155u.inf" /r '$global:portIP1' /m "HP Universal Printing PCL 6"'
"@
CMD /C $command
开头的@可以在任何位置,但结尾的@必须从行上的位置1开始。
有关此处字符串的详细信息,请参见Get-Help about_quoting_rules
。