繁体   English   中英

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

[英]Powershell : How to create IIS 6 Virtual Directory/Web application under a Subfolder

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

IIS 网站结构 <<<>>> 物理目录结构

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)      

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

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

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

我不确定这是否是正确的方法。

有没有更好的方法在特定子文件夹下创建 Web Application/VirtualDirectory 以及如何列出在子文件夹下创建的 VirtualDirectory/WebApplication。

通过脚本在 IIS 6.0 中创建虚拟目录的另一种解决方案(涉及 PowerShell)是使用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中的虚拟目录路径是使用正斜杠指定的。

您还可以使用相同的iisvdir.vbs脚本列出特定路径中的虚拟目录

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

试试这个。 它连接到网站 1(默认网站)的根目录。 为小工具文件夹创建一个 IIsWebDirectory object 并为其分配一个应用程序池。

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

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

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

Output:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM