如何围绕 IIS AppCmd 包装 Powershell
How to Wrap Powershell around IIS AppCmd
我正在尝试将 Powershell 包装在 AppCmd 周围以执行一些安全合规性检查。我决定这样做而不是使用 powershell 的 Get-WebConfiguration 命令,因为对于所有这些检查,安全策略已经提供了相应的 AppCmd 命令。因此,与其花太多时间尝试执行等效的 Get-WebConfiguration 命令,我决定编写一个函数,以变量形式获取提供的 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.
我读过之前的 post,它建议在将变量传递给 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 命令和参数都将通过变量提供,因此,如果这种技术不起作用,我的计划就会落空。我显然错过了一些东西。能否请您提供解决方案?
由于 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)
经过数小时的反复试验,我发现这个方法有效。
$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_Command
我正在尝试将 Powershell 包装在 AppCmd 周围以执行一些安全合规性检查。我决定这样做而不是使用 powershell 的 Get-WebConfiguration 命令,因为对于所有这些检查,安全策略已经提供了相应的 AppCmd 命令。因此,与其花太多时间尝试执行等效的 Get-WebConfiguration 命令,我决定编写一个函数,以变量形式获取提供的 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.
我读过之前的 post,它建议在将变量传递给 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 命令和参数都将通过变量提供,因此,如果这种技术不起作用,我的计划就会落空。我显然错过了一些东西。能否请您提供解决方案?
由于 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)
经过数小时的反复试验,我发现这个方法有效。
$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_Command