我有两个文件夹:
C:\的Inetpub \ SITE1
C:\的Inetpub \ site1Sub
我希望“site1”成为“父”网站,将“site1Sub”作为“子”网站。这两个站点应该在同一个应用程序池下运行,这是一个专为这些站点创建的自定义池,称之为“site1”。在IIS管理器(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
方法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中编写此场景的脚本?
答案 0 :(得分:2)
我发现在网站下创建应用时,我需要在调用-Force
时指定New-Item
开关。我已经遗漏了检查,看看该网站是否已经存在(Sneijder的回答显示了如何使用Test-Path
),但这应该可以解决问题:
Import-Module WebAdministration
$sitePath = 'IIS:\Sites\site1'
$subSitePath = "$sitePath\site1Sub"
$appPoolName = 'site1'
# Create Site and Subsite
New-Item $sitePath -PhysicalPath 'C:\Inetpub\site1' -Bindings @{protocol="http";bindingInformation=":80:"} }
New-Item $subSitePath -Type Application -PhysicalPath 'C:\Inetpub\site1Sub' -Force
# Create App Pool
New-Item "IIS:\AppPools\$appPoolName"
# Associate sites to App Pool
Set-ItemProperty $sitePath -Name applicationPool -Value $appPoolName
Set-ItemProperty $subSitePath -Name applicationPool -Value $appPoolName
答案 1 :(得分:1)
正如我所理解的,您希望在本地IIS管理器中获得以下结果:
此脚本创建一个应用程序池。然后它创建根网站,然后创建子网站。
Import-Module WebAdministration
$iisAppPoolName = "applicationPool"
$iisAppPoolDotNetVersion = "v4.0"
$iisAppName = "site1"
$directoryPath = "C:\inetpub\site1"
$iisSubAppName = "site1sub"
$directorySubPath = "C:\inetpub\site1Sub"
#navigate to the app pools root
cd IIS:\AppPools\
#check if the app pool exists
if (!(Test-Path $iisAppPoolName -pathType container))
{
#create the app pool
$appPool = New-Item $iisAppPoolName
$appPool | Set-ItemProperty -Name "managedRuntimeVersion" -Value $iisAppPoolDotNetVersion
}
#navigate to the sites root
cd IIS:\Sites\
#check if the site exists
if (Test-Path $iisAppName -pathType container)
{
return
}
#create the site
$iisApp = New-Item $iisAppName -bindings @{protocol="http";bindingInformation=":80:"} -physicalPath $directoryPath
$iisApp | Set-ItemProperty -Name $iisAppPoolName -Value $iisAppPoolName
#create the subSite
$iisSubApp = New-WebApplication -Name $iisSubAppName -Site $iisAppName -PhysicalPath $directorySubPath -ApplicationPool $iisAppPoolName
结果:
希望这有帮助。
答案 2 :(得分:-1)
您是否尝试将IIS目录树映射为PSDrive,然后重新尝试接近1?
https://technet.microsoft.com/en-us/library/ee176915.aspx
执行Get-PSDrive
以查看主机可用的PS提供程序,然后尝试将其映射为文件系统。
# For psprovider, I'm not sure if the provider name is 'IIS' or some other.
# For mapping remote drives, usually FileSystem works,
# but try Get-PSDrive to see whats available to your host for this switch.
New-PSDrive -name X -psprovider IIS -root 'IIS:\'
我没有在我的测试框上安装IIS配置以确认您,但只是将其放在此处尝试。