2016-12-16 193 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之外,我实际上并没有输入任何内容。我想这只是我的偏好。如果我觉得需要,我总是可以改回使用参数方法来实现更加模块化的方法。感谢您在这两篇文章中的信息。 –

相关问题