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



我正在尝试使用嵌入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

相关内容

  • 没有找到相关文章

最新更新