Como listar diretórios virtuais no IIS de todos os sites no PowerShell

8

Atingi um obstáculo completo e não consigo descobrir como imprimir os diretórios virtuais de cada site IIS 8. Eu continuo recuperando aplicativos e erros de argumento nulo vazios e simplesmente não consigo encontrar uma maneira de obter os diretórios virtuais a serem listados.

Preciso dos seguintes dados para listar os diretórios virtuais:

  • Caminho físico
  • Associação de Pool de Aplicativos
  • Nome do site
  • Credenciais

Abaixo está o código que eu tenho usado e brincando com:

    *See revised code below*

Eu também usei o Appcmd.execomando para tentar listar os diretórios virtuais:

C:\Windows\System32\inetsrv\appcmd.exe LIST VDIRS

Mas ainda não estou conseguindo a saída necessária. Qualquer coisa ou qualquer ajuda seria muito apreciada! Obrigado!

EDITAR#------------------------------------------------ ----------------------

Consegui listar meus diretórios virtuais comentando algumas linhas, mas ele apenas imprime o nome e o:

  • Caminho físico
  • Associação de Pool de Aplicativos
  • Nome do site
  • Credenciais

ainda são desconhecidos para mim, abaixo está o código revisado:

  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
fonte
A menos que você converta um diretório virtual em um aplicativo, ele herdará o pool de aplicativos do site. Você também está procurando por diretórios virtuais que são convertidos em aplicativos e também em diretórios virtuais "normais"?
jscott
$ jscott Estou procurando imprimir todos os diretórios virtuais existentes no IIS e as informações especificadas listadas na parte superior.
precisa saber é o seguinte

Respostas:

12

Você escreve que não consegue descobrir como recuperar:

  • Caminho físico
    • está diretamente acessível através da propriedade physicalPathnote
  • Associação de Pool de Aplicativos
    • Não faz sentido, os aplicativos são atribuídos a pools de aplicativos, os próprios diretórios não são
  • Nome do site
    • Você já sabe disso ( $Site.name)
  • Credenciais
    • Eu suponho que você só quer o nome de usuário, se presente

Tudo isso pode ser recuperado com algumas pequenas alterações no script existente:

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

Agora você pode exportar $AllVDirspara Xml, Csv ou simplesmente imprimi-lo no host do PowerShell.

Mathias R. Jessen
fonte
2

Obrigado @Mathias R. Jessen, esqueci-me deste post e deveria ter voltado porque percebi a maioria. Seu script funciona perfeitamente e aqui está o meu apenas para os S&G, não sabia que tudo o que eu precisava fazer era chamar os objetos e as propriedades.

$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 

            }

No entanto, também tenho outro problema e não sabia se você tinha a resposta, como eu chamaria a propriedade de credenciais do Caminho Físico para aplicativos da Web? Não consigo imprimir o nome de usuário ou a senha, mas posso imprimir o logonMethod que usa a mesma propriedade? abaixo está o meu código para aplicativos da web, é muito semelhante ao código dos meus diretórios virtuais:

$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
fonte
Também estou pensando que, se eu receber o $ Site.userName e o $ Site.password, eles não seriam os mesmos para o Web App?
user38725
0

Isso criará uma matriz que contém o nome do site, o nome do diretório virtual e o caminho físico do diretório virtual.

$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
Danger Mouse
fonte