簡體   English   中英

如何處理powershell腳本塊中的引號

[英]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.

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