我看过这个问题Getting all virtual directories for a IIS6 web site using WMI,但它没有回答我的问题。
我可以获取网站列表,但不能获取其中的应用程序或虚拟目录。我尝试了以下内容。
Get-WmiObject -class "IIsWebServerSetting" -namespace "root\microsoftiisv2" | select-object __SERVER, ServerComment, Name
Get-WmiObject -class "IIsWebVirtualDir" -namespace "root\microsoftiisv2" | select-object __SERVER, ServerComment, Name, Path, DefaultDoc
Get-WmiObject -class "IIsWebVirtualDirSetting" -namespace "root\microsoftiisv2" | select-object __SERVER, ServerComment, Name, Path, DefaultDoc
这些都不会检索虚拟目录列表。
我可以在metabase.xml文件中看到虚拟目录
<IIsWebVirtualDir Location ="/LM/W3SVC/1653786949/root/PBSNET2005/GUI"
AccessFlags="AccessExecute | AccessRead | AccessScript"
AppFriendlyName="ClientServicesGUI"
我之所以需要这个是因为我想使用绿色/蓝色部署过程。要确定要更新的版本,我需要找出当前版本的内容。我将使用虚拟目录的物理路径来执行此操作。
有没有人有另一种方法来获取虚拟目录的物理路径?有没有人直接查询或更新metabase.xml文件?
答案 0 :(得分:3)
试试这个:
gwmi -Namespace "root/MicrosoftIISv2" -Query "SELECT * FROM IIsWebVirtualDirSetting" | select name,path,AppFriendlyName
答案 1 :(得分:0)
您需要指定虚拟目录的路径。 WMI不返回文件夹树下面的虚拟目录。如果有人需要,这是powershell函数。
function Get-VirtualDirectoryPhysicalPathUsingWMI ([string]$server,[string]$siteName,[string]$vDirName,[string]$pathToVDir)
{
Invoke-Command $server -Script { param($siteName,$vDirName,$pathToVDir)
$iisWmiObj = Get-WmiObject -Namespace 'root\MicrosoftIISv2' -Class IISWebServerSetting -Filter "ServerComment = '${siteName}'"
$objIIS = new-object System.DirectoryServices.DirectoryEntry("IIS://localhost/" + $iisWmiObj.Name + $pathToVDir )
$directories = $objIIS.psbase.children
$vDir = $directories.find($vDirName, "IIsWebVirtualDir")
return $vDir.path
} -Args $siteName,$vDirName,$pathToVDir
#Get-VirtualDirectoryPhysicalPathUsingWMI "pbsdevmaintws02" "Default Web Site" "GUI" "/Root/PBSNET2005"
}