繁体   English   中英

无法通过命令提示符运行 powershell 命令

[英]Cannot run powershell command via command prompt

我正在尝试使用以下命令检查我的 Windows SMTP 服务器的 RelayForAuth 设置。 Powershell 似乎显示正确的结果 'False' 但通过命令提示符运行相同的命令时,会产生错误:

电源外壳示例:

([ADSI]"IIS://localhost/smtpsvc/1".RelayForAuth -like "*0*")

输出:

False

命令提示符示例:

powershell -command "([ADSI]"IIS://localhost/smtpsvc/1".RelayForAuth -like "*0*")"

输出:

At line:1 char:8
+ ([ADSI]IIS://localhost/smtpsvc/1.RelayForAuth -like *0*)
+        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Unexpected token 'IIS://localhost/smtpsvc/1.RelayForAuth' in expression or 
statement.
At line:1 char:8
+ ([ADSI]IIS://localhost/smtpsvc/1.RelayForAuth -like *0*)
+        ~
Missing closing ')' in expression.
At line:1 char:56
+ ([ADSI]IIS://localhost/smtpsvc/1.RelayForAuth -like *0*)
+                                                        ~
Unexpected token ')' in expression or statement.
+ CategoryInfo          : ParserError: (:) [], 
ParentContainsErrorRecordException
+ FullyQualifiedErrorId : UnexpectedToken

由于您正在嵌套(嵌入) "字符。 -逐字传递给 PowerShell - 在句法外部双引号 ( "..." ) 内,您必须转义那些嵌套的"字符。

即使 PowerShell-内部`用作转义字符,从外部( cmd.exe ) 调用 PowerShell CLI ( powershell.exe / pwsh ) 也需要\ -escaping of "

# Embedded " chars. must be \-escaped
powershell -command "([ADSI]\"IIS://localhost/smtpsvc/1\").RelayForAuth -like \"*0*\""

请注意,如果您对整个"..."字符串中的字符串进行引号,则可以避免这种转义的需要 虽然这在您的情况下工作正常,但鉴于您的字符串只有逐字内容,请注意,如果不需要字符串插值,这通常只是一个选项

# Embedded strings use '...' -> no escaping needed.
powershell -command "([ADSI]'IIS://localhost/smtpsvc/1').RelayForAuth -like '*0*'"

警告使用单引号括起整个命令( '...'不能按预期从cmd.exe工作:后者不将这些识别为引用,PowerShell 只是将字符串解释为使用语法逐字字符串,因此只打印字符串的内容。

有关更多信息,请参阅此答案

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM