Как перечислить виртуальные каталоги в IIS со всех веб-сайтов в PowerShell

8

Я преодолел полный контрольно-пропускной пункт и не могу понять, как распечатать виртуальные каталоги для каждого веб-сайта в 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 

            }
user38725
источник
Если вы не преобразуете виртуальный каталог в приложение, он наследует пул приложений сайта. Вы также ищете виртуальные каталоги, которые конвертируются в приложения, а также "нормальные" виртуальные каталоги?
Джскотт
$ jscott Я хочу распечатать все виртуальные каталоги, которые существуют в IIS, и указанную информацию я перечислил вверху.
user38725

Ответы:

12

Вы пишете, что не можете понять, как получить:

  • Физический Путь
    • напрямую доступен через physicalPathnoteproperty
  • Ассоциация пула приложений
    • не имеет смысла, приложения назначаются на пулы приложений, сами каталоги не
  • Название сайта
    • Вы уже знаете это ( $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.

Матиас Р. Ессен
источник
2

Спасибо @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 

            }

Также есть еще одна проблема, и я не знаю, если у вас есть ответ, как я могу вызвать свойство учетных данных физического пути для веб-приложений? Я не могу распечатать имя пользователя или пароль, но я могу напечатать 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

                        } 
            }
user38725
источник
Я также думаю, что если я получу $ Site.userName и $ Site.password, они не будут одинаковыми для веб-приложения?
user38725
0

Это создаст массив, который содержит имя сайта, имя виртуального каталога и физический путь виртуального каталога.

$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
Опасная Мышь
источник