【发布时间】:2016-03-28 23:10:36
【问题描述】:
我有两个文件夹:
c:\inetpub\site1
c:\inetpub\site1Sub
我希望“site1”成为“父”网站,“site1Sub”成为“子”网站。两个站点应该在同一个应用程序池下运行,这是一个专门为这些站点创建的自定义池,称为“site1”。在 IIS 管理器 (7.5) 中,我只需创建应用程序池,然后创建父站点,然后右键单击父站点并“添加应用程序”,将其指向物理路径“c:\inetpub\site1Sub”。这一切都很好。
但是,当我尝试在 Powershell 中编写脚本时,事情变得很困难。我可以毫无问题地创建“site1”和应用程序池。这是一个痛苦的子站点。我尝试了两种方法:
方法一:使用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
方法2:创建一个虚拟目录并使用ConvertTo-WebApplication(如this answer)。
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 中编写此场景的脚本?
【问题讨论】:
-
故障排除方法 1,执行以下工作:
Set-ItemProperty -Path "IIS:\Sites\site1\site1Sub" -Name "applicationPool" -Value "site1"。如果是这样,我怀疑Set-ItemProperty绑定到来自 $subSub 对象的意外属性(例如短名称“site1Sub”)并将其附加到当前工作目录 C:\。
标签: asp.net powershell iis