[英]how to dealing with quotes in powershell scriptblock
此代碼按預期工作:
$var = "a123"
$script = @'
Add-Content C:\temp\test.txt -Value {{"{0} name1"}}
Add-Content C:\temp\test.txt -Value {{"{0} name2"}}
'@ -f $var
$command = [scriptblock]::Create($script)
Start-Process powershell.exe -Verb RunAs -ArgumentList "-NoExit -command & {$command}" -Wait
但是當我將 $var 的值更改為“123”時,出現錯誤:
At line:1 char:49
+ & {Add-Content C:\temp\test.txt -Value {123 name1}
+ ~~~~~
Unexpected token 'name1' in expression or statement.
At line:2 char:46
+ Add-Content C:\temp\test.txt -Value {123 name2}}
+ ~~~~~
Unexpected token 'name2' in expression or statement.
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : UnexpectedToken
我嘗試使用其他引號,將其強制轉換為字符串,但沒有可行的解決方案。 有人可以幫忙嗎?
我想我想通了,發生了什么以及如何解決它。
問題是,當您的腳本塊的第一個標記未識別為字符串時,一旦將命令傳遞給 powershell.exe 並且發生了一些有趣的事情,腳本塊中的雙引號就會以某種方式丟失。 比較一下:
{123a name1} # Returns a script block
{123 name1} # Fails with "UnexpectedToken" exception
{$true name1} # Fails with "UnexpectedToken" exception
我沒有絲毫的想法,為什么會發生這種情況,但這是你可以做的,解決它:
$var = "123"
$script = @'
Add-Content C:\temp\test.txt -Value {{'{0} name1'}}
Add-Content C:\temp\test.txt -Value {{'{0} name2'}}
'@ -f $var
當命令傳遞時,單引號以某種方式保持不變,並且C:\\temp\\test.txt
的輸出如下所示:
'123 name1'
'123 name2'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.