簡體   English   中英

如何在CMD.EXE語句中使用Powershell全局變量

[英]How to use Powershell global variable inside CMD.EXE statement

我正在嘗試使用帶有嵌入式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")}

我將使用一個可擴展(雙引號)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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM