Я столкнулся с полным препятствием и не могу понять, как распечатать виртуальные каталоги для каждого веб-сайта в IIS 8
. Я продолжаю извлекать ошибки приложений и пустых нулевых аргументов и просто не могу найти способ вывести виртуальные каталоги в список.
Чтобы перечислить виртуальные каталоги, мне нужны следующие данные:
Ниже приведен код, который я использовал и с которым возился:
*See revised code below*
Я также использовал Appcmd.exe
команда, чтобы попытаться вывести список виртуальных каталогов:
C:\Windows\System32\inetsrv\appcmd.exe LIST VDIRS
Но я все еще не получаю нужного результата. Все или любая помощь будет очень признательна! Спасибо!
Получил список моих виртуальных каталогов, закомментировав пару строк, но он выводит только имя и:
мне пока неизвестны, ниже доработанный код:
Import-Module WebAdministration
$Websites = Get-ChildItem IIS:\Sites
foreach($Site in $Websites)
{
$webapps = Get-WebApplication -Site $Site.name
$VDir = Get-WebVirtualDirectory -Site $Site.name #-Application $webapps.name
foreach($webvdirectory in $VDir)
{
$webvdirectory2 = $webvdirectory.path
Write-Host $webvdirectory2.split("/")[-1]
#Write-Host $webvdirectory
#Write-Host $webvdirectory.name
}
#Write-Host $VDir
}
Вы пишете, что не можете понять, как получить:
physicalPath
примечание$Site.name
)Все это можно получить с небольшими изменениями в существующем скрипте:
Import-Module WebAdministration
$Websites = Get-ChildItem IIS:\Sites
$AllVDirs = @()
foreach($Site in $Websites)
{
$VDirs = Get-WebVirtualDirectory -Site $Site.name
foreach($webvdirectory in $VDirs)
{
$vdir = New-Object psobject -Property @{
"Name" = ($webvdirectory.path -split "/")[-1]
"Site" = $Site.name
"Path" = $webvdirectory.path
"PhysicalPath" = $webvdirectory.physicalPath
"PhysicalPathCredentials" = $webvdirectory.userName
}
$AllVDirs += $vdir
}
}
$AllVDirs
Теперь вы можете экспортировать $AllVDirs
в Xml, Csv или просто распечатайте его на хосте PowerShell.
Спасибо @Mathias R. Jessen, я забыл об этом посте, и мне нужно было вернуться, потому что я понял большую часть этого. Ваш сценарий работает отлично, а вот мой только для S&G, я не понимал, что мне нужно было только вызвать объекты и свойства.
$Websites = Get-ChildItem IIS:\Sites
foreach($Site in $Websites)
{
$webapps = Get-WebApplication -Site $Site.name
$VDir = Get-WebVirtualDirectory -Site $Site.name #-Application $webapps.name
foreach($webvdirectory in $VDir)
{
$webvdirectory2 = $webvdirectory.path
Write-Host $webvdirectory2.split("/")[-1] "::: is the Virtual Directory" -ForegroundColor Green
Write-Host $webvdirectory.physicalPath
Write-Host $webvdirectory.userName
Write-Host $webvdirectory.password
Write-Host $webvdirectory.logonMethod
}
#Write-Host $VDir
}
Также есть еще одна проблема, и я не знаю, есть ли у вас ответ, как мне вызвать свойство учетных данных Physical Path для веб-приложений? Я не могу распечатать имя пользователя или пароль, но могу распечатать logonMethod, который использует то же свойство? ниже мой код для веб-приложений, он очень похож на мой код виртуальных каталогов:
$Websites = Get-ChildItem IIS:\Sites
foreach($Site in $Websites)
{
$webapps = Get-WebApplication -Site $Site.name
foreach($webapp in $webAPPS)
{
Write-Host $webapp.applicationPool
Write-Host $WebApp.virtualDirectoryDefaults.userName
Write-Host $webapp.virtualDirectoryDefaults.password
Write-Host $webapp.virtualDirectoryDefaults.logonMethod
$webapp2 = $webapp.path
Write-Host $WebApp2.split("/")[-1] "::: is the Web Application" -ForegroundColor Green
}
}
Это создаст массив, содержащий имя сайта, имя виртуального каталога и физический путь виртуального каталога.
$SiteVirtualDirectories = @()
$Sites = gci IIS:\Sites
foreach($Site in $Sites)
{
$VirtualDirectories = gci "IIS:\Sites\$($Site.Name)" | ?{$_.NodeType -match "virtualDirectory"}
foreach($VirtualDirectory in $VirtualDirectories)
{
$SiteVirtualDirectories += @([pscustomobject]@{Site=$Site.Name;VirtualDirectory=$VirtualDirectory.Name;PhysicalPath=$VirtualDirectory.PhysicalPath})
}
}
Write-Host $SiteVirtualDirectories