使用单引号指定 AppCmd 参数

使用单引号指定 AppCmd 参数

我正在尝试使用 appcmd.exe 在 Windows 2016 上的 IIS 中配置站点。具体来说,是 PHP 和 FastCGI。我遇到了一个问题,即使用单引号指定参数参数失败。我似乎无法弄清楚如何转义此问题或需要使用什么引号。以下是有效的命令:

%windir%\system32\inetsrv\appcmd.exe set config /section:system.webServer/fastCGI /+"[fullPath='c:\php\php-cgi.exe', arguments='-d open_basedir=E:\Web\www.example.com;E:\Sessions\www.example.com;E:\Logs\www.example.com;E:\Temp\www.example.com', maxInstances='0', instanceMaxRequests='10000']" /commit:apphost

在 Windows 上使用 open_basedir 我需要

-d open_basedir=E:\Web\www.example.com;E:\Sessions\www.example.com;E:\Logs\www.example.com;E:\Temp\www.example.com

用单引号括起来。像这样:

-d open_basedir='E:\Web\www.example.com;E:\Sessions\www.example.com;E:\Logs\www.example.com;E:\Temp\www.example.com'

如果我首先创建没有参数的 FastCGI 应用程序,那么我可以随后像这样添加它们:

%windir%\system32\inetsrv\appcmd.exe set config /section:system.webServer/fastCGI /[fullPath='c:\php\php-cgi.exe'].arguments:"-d open_basedir='E:\Web\www.example.com;E:\Sessions\www.example.com;E:\Logs\www.example.com;E:\Temp\www.example.com'" /commit:apphost

这个问题是我无法随后更改其他设置,因为我无法使用 appcmd 指定单引号路径。

我可以使用 IIS 管理器 GUI 和 C# 代码来实现这一点。因此,绝对可以这样设置。我似乎无法获得 appcmd 的正确格式。

答案1

使用两个单引号来表示字符串中的单引号,例如

C:\Windows\System32\inetsrv\appcmd.exe set config  -section:system.webserver/httpProtocol /+"customHeaders.[name='Content-Security-Policy',value='default-src ''self'';']"

答案2

我在尝试寻找相同答案时遇到了您的问题。我发现了一种解决方法,想告诉您。

使用 appcmd.exe 的 XML i/o 功能。在具有正确标头的网站上,运行 appcmd list config /section:httpProtocol /xml > addheaders.xml 并保存输出文件。在另一个系统上,您可以运行 appcmd set config /in < addheaders.xml

我相信如果您不想依赖额外的文件,您可以找到一种方法将 xml 包含在脚本中。

相关内容