我正在尝试使用Powershell在IIS 6网站的特定子文件夹下创建一个Web应用程序/ VirtualDirectory,如下所示:
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。
答案 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}