2016-12-16 25 views
0

Powershellの特殊文字を含むパラメータを関数内のObjectに渡す方法を解明しようとしています。ここに私のコードの例があります。コマンドラインからオブジェクトに値を渡すことができません - Powershell Paramter

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 

でこれを入力すると、それがためにエラーに発射します ";"次の2つのオプションが、私はそれを見る方法を持っている

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'はあなたのために文字列を返し、すべての入力をその文字列として解釈しています。私はそれが動作すると思うが、毎回の実行に時間を費やすことは、2つの引用符を入力するだけで簡単だと思うと奇妙に思える。 – Matt

+0

@Matt hey Matt、私はコマンドラインにコピーして貼り付けている。だから私は実際には私のコマンドレットのほかに何も入力していません。私はそれが今のところ私の好みだと思う。必要があると感じたら、私はいつもよりモジュラーなアプローチのためにパラメータメソッドを使うことに戻ることができます。あなたの投稿の両方の情報をお寄せいただきありがとうございます。 –

関連する問題