我有两个文件夹:
c:\inetpub\site1
c:\inetpub\site1Sub
我希望"site1"是"父级"网站,"site1Sub"是"子级"网站。这两个网站都应该在同一个应用程序池下运行,这是一个专门为这些网站创建的自定义池,称之为“site1”。在IIS Manager (7.5)中,我只需创建应用程序池,然后创建父站点,然后右键单击父站点并“添加应用程序”,将其指向物理路径“c:\inetpub\site1Sub”。这一切都很顺利。
但当我尝试在Powershell中编写脚本时,事情变得困难。我可以轻松创建"site1"和应用程序池,但是子站点让人头疼。我尝试了两种方法:
方法1:使用New-Item
并在之后设置应用程序池。
$subSite = New-Item "IIS:\Sites\site1\site1Sub" -physicalPath "C:\inetpub\site1Sub" -type "Application"
$subSite | Set-ItemProperty -Name "applicationPool" -Value "site1"
使用这种方法,在Set-ItemProperty
命令后,我收到了一个错误:
Set-ItemProperty : Cannot find path 'C:\site1Sub' because it does not exist.
At line:1 char:127
+ $subSite | Set-ItemProperty -Name "applicationPool" -Value "site1" ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (C:\site1Sub:String) [Set-ItemProperty], ItemNotFoundException
+ FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.SetItemPropertyCommand
方法二:创建一个虚拟目录并使用ConvertTo-WebApplication
(如这个答案中所示)。
New-WebVirtualDirectory -Site "site1" -Name "site1Sub" -PhysicalPath "c:\inetpub\site1Sub"
ConvertTo-WebApplication -ApplicationPool "site1" "IIS:\Sites\site1\site1Sub"
这段代码运行良好,而且在 IIS 管理器中也看起来不错,但当我尝试访问网站时,收到一个错误提示,指出 web.config 解析失败:
“错误:在应用程序级别之外使用已注册为 allowDefinition='MachineToApplication' 的部分是错误的。这可能是由于虚拟目录未在 IIS 中配置为应用程序所致。”
我完全被卡住了。如何在 Powershell 中编写此方案呢?
Set-ItemProperty -Path "IIS:\Sites\site1\site1Sub" -Name "applicationPool" -Value "site1"
。如果有效,我怀疑Set-ItemProperty
将绑定到$subSub对象的意外属性(例如,短名称“site1Sub”),并将其附加到当前工作目录C:\。 - Charlie Joynt