2016-12-16 105 views
0

我想弄清楚如何將包含Powershell中的特殊字符的參數傳遞給函數中的對象。這是我的代碼的一個例子。無法將值從命令行傳遞給對象 - Powershell參數

function a{ 
param(
[string]$string  
) 
#convert to URL encoding here 
#Query API 
#Return JSON values 
} 

現在我在PowerShell中

PS> a foo(foo; bar) foo/bar ver1.0 

鍵入這一點,它激發對錯誤 「;」然後「)」作爲字符串

下面的部分是錯誤:

At line:1 char:32 
+ a foo(foo; bar) foo/bar ver1.0 
+        ~ 
Missing closing ')' in expression. 
At line:1 char:41 
+ a foo(foo; bar) foo/bar ver1.0 
+           ~ 
Unexpected token ')' in expression or statement. 
+ CategoryInfo   : ParserError: (:) [],  ParentContainsErrorRecordException 
+ FullyQualifiedErrorId : MissingEndParenthesisInExpression 
+1

把你傳遞單引號括起來的..? – arco444

+0

@ arco444我不希望每次都使用單引號。有沒有辦法解決這個問題? –

+0

您必須使用引號或轉義特殊字符否則PowerShell認爲它們是單獨的或特​​殊項目。這是PowerShell和其他語言解析如何工作的核心。 – Matt

回答

2

你有兩個選擇我看到它的方式。

使用單引號:

a 'foo(foo; bar) foo/bar ver1.0' 

或者逃避所有的特殊字符:

a foo`(foo`;` bar`)` foo/bar` ver1.0 
+0

這些似乎是唯一可行的解​​決方案。所以在這種情況下,我會接受這是最好的答案。但是,我恢復使用Read-Host來接受輸入,因爲它比每次將它們封裝在引號中容易。 –

+2

@Badlarry'Read-Host'爲您返回一個字符串,並將所有輸入解釋爲該字符串。我認爲這很有效,但似乎很奇怪,你認爲在每次執行時花費時間打字更容易,然後只需輸入兩個引號 – Matt

+0

@Matt嘿馬特,我只是複製並粘貼到命令行中。所以,除了我的cmdlet之外,我實際上並沒有輸入任何內容。我想這只是我的偏好。如果我覺得需要,我總是可以改回使用參數方法來實現更加模塊化的方法。感謝您在這兩篇文章中的信息。 –

相關問題