我正在尝试将Powershell封装在AppCmd上,以执行一些安全性遵从性检查。我决定这样做,而不是使用powershell的Get-WebConfiguration命令,因为对于所有这些检查,安全策略已经提供了相应的AppCmd命令。因此,我决定编写一个函数,以变量的形式接受提供的AppCmd命令和参数,并在powershell中运行这些命令和参数,并可能将结果传递给另一个函数,而不是花费太多的时间试图解决等效的命令。
我面临许多将变量值传递给AppCmd的问题。以下代码工作:
$appCmd = "C:\Windows\system32\inetsrv\appcmd.exe"
& $appCmd list config /section:system.web/authentication /text:forms.requireSSL到目前一切尚好。现在,下面的代码导致一个错误:
$appCmd = "C:\Windows\system32\inetsrv\appcmd.exe"
$appcmd_args = "list config /section:system.web/authentication /text:forms.requireSSL"
& $appCmd $appcmd_args该错误如下:
Object 'LIST CONFIG /SECTION:SYSTEM.WEB/AUTHENTICATION /TEXT:FORMS.REQUIRESSL' is not supported. Run 'appcmd.exe /?' to display supported objects.我阅读了前一篇文章,其中建议在将变量传递给${}时使用AppCmd。所以,试过这个:
$appCmd = "C:\Windows\system32\inetsrv\appcmd.exe"
$appcmd_args = "list config /section:system.web/authentication /text:forms.requireSSL"
& $appCmd ${appcmd_args}我可能做错了,所以我得到了与上面相同的错误。我还注意到,下面的代码也有相同的错误:
$appCmd = "C:\Windows\system32\inetsrv\appcmd.exe"
& $appCmd "list config /section:system.web/authentication /text:forms.requireSSL"也许需要进行某种类型的转换或调整?
所有的AppCmd命令和参数都将通过变量提供,因此,如果这项技术不起作用,我的计划就会失败。很明显我漏掉了什么。你能给我一个解决方案的建议吗?
发布于 2021-01-04 17:34:25
因为appcmd.exe需要用空格分隔的参数,所以不能将其全部作为一个字符串发送。我会采取这些方法之一。
用逗号分隔每个参数,然后分割它们。
$appcmd_args = "list", "config", "/section:system.web/authentication", "/text:forms.requireSSL"
& $appCmd $appcmd_args或者,您可以像下面这样将参数拆分成一行
$appcmd_args = "list config /section:system.web/authentication /text:forms.requireSSL"
& $appCmd (-split $appcmd_args)发布于 2021-01-04 19:23:07
经过几个小时的尝试和错误,我发现这是可行的。
$appCmd = "C:\Windows\system32\inetsrv\appcmd.exe"
$appcmd_args = "list config /section:system.web/authentication /text:forms.requireSSL"
$AppCmd_Command = [string]::Format("{0} {1}", $appCmd, $appcmd_args)
iex $AppCmd_Commandhttps://stackoverflow.com/questions/65566237
复制相似问题