我正在尝试使用带有嵌入式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]"\\$computer\root\cimv2: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:\inetpub\ftproot\Prdrivers\HP Universal Print Driver\hpcu155u.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")}
答案 0 :(得分:3)
我将使用一个可扩展(双引号)here-string。然后你可以把你想要的任何引号,无论你想要什么,它们将被解析为文字文本:
$global:portIP1 = "printer01"
$global:portIP2 = "printer02"
$command = @"
'printui.exe /if /b "PrinterB&W1" /f "C:\inetpub\ftproot\Prdrivers\HP Universal Print Driver\hpcu155u.inf_amd64_neutral_bcdaf832a18b6add/hpcu155u.inf" /r '$global:portIP1' /m "HP Universal Printing PCL 6"'
"@
CMD /C $command
开场@“可以在任何位置,但结束时”@必须从第1位开始。
有关here-strings的详细信息,请参阅Get-Help about_quoting_rules
。