Powershell:如何在子文件夹下创建IIS 6虚拟目录/ Web应用程序

时间:2011-06-03 18:38:34

标签: powershell iis-6

我正在尝试使用Powershell在IIS 6网站的特定子文件夹下创建一个Web应用程序/ VirtualDirectory,如下所示:

IIS WebSite结构<<<>>>物理目录结构

Test (website) ---------------->   c:\InetPub
    SubDirectory ------------------>   ..\Subdirectory
       gadgets (Web App) -----------------> ..\Gadgets

脚本

$WebSiteName = “Test”
$virtualDirName = “subdirectory\gadgets”
$appPoolName = “DefaultAppPool”
$VirtalDirHomePath = "c:\InetPub\Subdirectory\Gadgets"

$iisWebSite = Get-WmiObject "IISWebServerSetting" `
                 -Namespace "root\MicrosoftIISv2"     `
                 -filter "ServerComment like '%$WebSiteName%'"
$virtualDirSettings = [wmiclass] "root\MicrosoftIISv2:IIsWebVirtualDirSetting"
$newVDir = $virtualDirSettings.CreateInstance()
$newVDir.Name = ($iisWebSite.Name + '/ROOT/' + $virtualDirName)
$newVDir.Path = $VirtalDirHomePath
$newVDir.Put();

$nvdir = $iisWebSite.Name + '/ROOT/' + $virtualDirName

$nvdir = $nvdir.Replace("\", "/") 

$v = Get-WmiObject -Class IIsWebVirtualDir -Namespace root\microsoftiisv2 `
                       -filter "Name='$nvdir'"

#Create WebAppliction
$v.AppCreate3(2, $appPoolName, 1)      

如果我使用正斜杠路径分隔符($virtualDirName)指定subdirectory/gadgets,则$newVDir.Put()调用抛出异常

  

用“0”调用“Put”的异常   参数:“Win32:系统不能   找到指定的路径。

如果我使用反斜杠路径分隔符(子目录\ gadgets)更改$virtualDirName $newVDir.Put()调用成功返回。

我不确定这是否正确。

有没有更好的方法在特定子文件夹下创建Web应用程序/ VirtualDirectory?如何列出在子文件夹下创建的VirtualDirectory / WebApplication。

2 个答案:

答案 0 :(得分:4)

涉及PowerShell的create a virtual directory in IIS 6.0 through scripting的替代解决方案是使用 iisvdir.vbs 脚本:

SET webSiteName=Test
SET virtualDirName=subdirectory/gadgets
SET virtualDirHomePath=C:\InetPub\Subdirectory\Gadgets

cscript %SystemRoot%\system32\iisvdir.vbs /create %webSiteName% %virtualDirName% %virtualDirHomePath%

请注意virtualDirName中的虚拟目录路径是使用正斜杠指定的。

您也可以list the virtual directories in a specific path使用相同的 iisvdir.vbs 脚本:

cscript %SystemRoot%\system32\iisvdir.vbs /query %webSiteName%/%virtualDirName%

答案 1 :(得分:3)

试一试。它连接到网站1(默认网站)的根目录。为gadgets文件夹创建一个IIsWebDirectory对象,并为其分配一个应用程序池。

$root = [adsi] "IIS://localhost/W3SVC/1/ROOT"
$vDir = $root.Create("IIsWebDirectory", "SubDirectory\Gadgets")
$vDir.AppCreate3(2, "DefaultAppPool", $false)
$vDir.AppFriendlyName = "Andy Test"
$vDir.SetInfo()

如果您需要连接到默认网站以外的网站,您可以使用此命令获取网站的ID:

([adsi] "IIS://localhost/W3SVC").psbase.Children | ? {$_.psbase.schemaclassname -eq "IIsWebServer" } | select Path, ServerComment

输出:

Path                         ServerComment
----                         -------------
IIS://localhost/W3SVC/1      {Default Web Site}
IIS://localhost/W3SVC/2      {WHS site}