如何在CMD.EXE语句中使用Powershell全局变量

时间:2013-12-16 12:12:17

标签: windows variables powershell cmd global-variables

我正在尝试使用带有嵌入式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")}

1 个答案:

答案 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