2012-07-11 16 views
2

何时需要在Powershell中用双引号括住字符串?我需要下面所有这些吗?何时需要在Powershell中使用报价?

& "$sendemail" -f "$sender" -t "$recipient" -u "$subject" -o message-file="$logpath" -s "$emailserver" -o tls=no 
+1

引用规则在这里:http://technet.microsoft.com/en-us/library/dd315325.aspx – nimizen 2012-07-11 14:21:31

回答

4

在这种情况下,你不需要任何东西。

  • $sendemail是希望已经是一个字符串,因此调用操作&将在它的工作(也许什么都将得到强制转换为字符串,反正)。
  • 所有其它变量应该通过正确的引号,以及:

    PS> $subject = 'subject string' 
    PS> $recipient = 'recipient string' 
    PS> $logpath = 'log path' 
    PS> $emailserver = 'email server' 
    PS> $recipient = 'recipient''s name' 
    PS> $sender = 'sender''s name' 
    PS> $sendemail = './echoargs.exe' 
    PS> & $sendemail -f $sender -t $recipient -u $subject -o message-file=$logpath -s $emailserver -o tls=no 
    arg 1: -f 
    arg 2: sender's name 
    arg 3: -t 
    arg 4: recipient's name 
    arg 5: -u 
    arg 6: subject string 
    arg 7: -o 
    arg 8: message-file=log path 
    arg 9: -s 
    arg 10: email server 
    arg 11: -o 
    arg 12: tls=no 
    

,如果你想传递一个包含特殊字符(如外壳运营商或空格)的文本字符串您需要报价程序,如:

./echoargs 'some spaces and a | pipe' 

如果所有的参数要么不包含这样的事情或者已经包含在一个字符串变量本身你没有引号不错。

2

到目前为止所有的答案都给出了完整问题的答案片段“什么时候需要在PowerShell中引用(何时需要,您使用哪种类型)?”尽管人们自然会认为MSDN页面about_quoting_rules会有完整的答案,但它不会。它主要涵盖只是字符串插值和这里的字符串,但而不是地址是否或如果你真的需要报价。

PowerShell的答案可能比其他语言稍微复杂一些,因为PowerShell提供了既是脚本语言又是shell语言的灵活性。 PowerShell旨在最大限度地减少shell的打字工作,正如人们所期望的那样,但同时又要与PowerShell脚本完全互操作。

我实际上已经开始撰写详细的答案,在这里发布,但它不断发展壮大,直到它变成了一篇文章长度的故事,再加上一个弹出式挂图(片段如下所示),所有这些发表在Simple-Talk上。 COM。见When to Quote in PowerShell

enter image description here