1

I'm attempting to configure a site in IIS on Windows 2016 using appcmd.exe. Specifically PHP and FastCGI. I'm running into an issue where specifying the arguments parameter with single quotes fails. I can't seem to figure out how to escape this or what incantation of quotes is required. Here's the command the does work:

%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 

With open_basedir on Windows I need

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

to be enclosed in single quotes. Like this:

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

If I create the FastCGI application first without arguments, I can add them afterwards like this:

%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 

This issue is that I can't change additional settings afterwards because I can't specify the single quoted path with appcmd.

I can accomplish this with the IIS Manager GUI and via C# code. So it's definitely possible to set it this way. I just can't seem to get the correct format for appcmd.

2
  • 1
    AppCmd.exe is a legacy program, have you considered using PowerShell to configure IIS? You can also try to use Configuration Editor in the GUI to make your changes and then have a look at the generated AppCmd command using the Generate Script dialog. Commented Jan 24, 2018 at 16:08
  • I realize it's older, but it's still supported as far as I can tell. It's also scattered through many scripts in the organization. I didn't really want to rewrite everything in PowerShell. FWIW, appcmd has the same single quote issue on 2008 R2. Commented Jan 24, 2018 at 17:12

2 Answers 2

1

You use two single quotes to indicate a single quote in a string, for example

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

I ran across your question while trying to find the same answer. I discovered a workaround and wanted to let you know.

Use the XML i/o feature of appcmd.exe. On a site with the proper headers, run appcmd list config /section:httpProtocol /xml > addheaders.xml and save the output file. On another system, you can run appcmd set config /in < addheaders.xml

I'm sure you can find a way to include the xml inside the script if you don't want to rely on an extra file.

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.