无法通过命令提示符 运行 powershell 命令
Cannot run powershell command via command prompt
我正在尝试使用以下命令检查 Windows SMTP 服务器的 RelayForAuth 设置。 Powershell 似乎显示正确的结果 'False' 但是当 运行 通过命令提示符执行相同的命令时,它会生成错误:
Powershell 示例:
([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 - 在 syntactic 外部 double-quoting ("..."
), you must escape 那些嵌套的 "
个字符。
即使 PowerShell-内部 `
作为转义字符,调用 PowerShell CLI (powershell.exe
/ pwsh
) 从外部 (cmd.exe
) 需要\
-转义"
:
# Embedded " chars. must be \-escaped
powershell -command "([ADSI]\"IIS://localhost/smtpsvc/1\").RelayForAuth -like \"*0*\""
请注意,如果您单引用整个"..."
字符串[=55=中的字符串,则可以避免这种转义的需要].
虽然这在您的情况下工作正常,但鉴于您的字符串只有 逐字 内容,请注意,这 通常只是一个选项,如果不需要 string interpolation :
# Embedded strings use '...' -> no escaping needed.
powershell -command "([ADSI]'IIS://localhost/smtpsvc/1').RelayForAuth -like '*0*'"
警告:使用single-quoting来包含整个命令('...'
)不会 按 cmd.exe
的预期工作:后者不将这些识别为引用,PowerShell 只是将字符串解释为使用 its 语法逐字逐句字符串,因此只需 打印 字符串的内容。
有关详细信息,请参阅 。
我正在尝试使用以下命令检查 Windows SMTP 服务器的 RelayForAuth 设置。 Powershell 似乎显示正确的结果 'False' 但是当 运行 通过命令提示符执行相同的命令时,它会生成错误:
Powershell 示例:
([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 - 在 syntactic 外部 double-quoting ("..."
), you must escape 那些嵌套的 "
个字符。
即使 PowerShell-内部 `
作为转义字符,调用 PowerShell CLI (powershell.exe
/ pwsh
) 从外部 (cmd.exe
) 需要\
-转义"
:
# Embedded " chars. must be \-escaped
powershell -command "([ADSI]\"IIS://localhost/smtpsvc/1\").RelayForAuth -like \"*0*\""
请注意,如果您单引用整个"..."
字符串[=55=中的字符串,则可以避免这种转义的需要].
虽然这在您的情况下工作正常,但鉴于您的字符串只有 逐字 内容,请注意,这 通常只是一个选项,如果不需要 string interpolation :
# Embedded strings use '...' -> no escaping needed.
powershell -command "([ADSI]'IIS://localhost/smtpsvc/1').RelayForAuth -like '*0*'"
警告:使用single-quoting来包含整个命令('...'
)不会 按 cmd.exe
的预期工作:后者不将这些识别为引用,PowerShell 只是将字符串解释为使用 its 语法逐字逐句字符串,因此只需 打印 字符串的内容。
有关详细信息,请参阅