Come elencare le directory virtuali in IIS da tutti i siti Web in PowerShell


8

Ho raggiunto un blocco completo e non riesco a capire come stampare le directory virtuali per ciascun sito web in IIS 8. Continuo a recuperare applicazioni e svuoto errori di argomenti null e non riesco proprio a trovare un modo per elencare le directory virtuali.

Ho bisogno dei seguenti dati per elencare le Directory virtuali:

  • Percorso fisico
  • Associazione pool di app
  • Nome del sito
  • Credenziali

Di seguito è riportato il codice che ho usato e con cui scherzo:

    *See revised code below*

Ho anche usato il Appcmd.execomando per provare ed elencare le Directory virtuali:

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

Ma non sto ancora ottenendo l'output di cui ho bisogno. Qualsiasi cosa o aiuto sarebbe molto apprezzato! Grazie!

MODIFICARE#------------------------------------------------ ----------------------

Ho elencato le mie directory virtuali commentando un paio di righe ma stampa solo il nome e il:

  • Percorso fisico
  • Associazione pool di app
  • Nome del sito
  • Credenziali

mi sono ancora sconosciuti, di seguito è riportato il codice rivisto:

  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 

            }

A meno che non si converta una directory virtuale in un'applicazione, eredita il pool di applicazioni del sito. Cerchi anche directory virtuali che vengono convertite in applicazioni e directory virtuali "normali"?
jscott,

$ jscott Sto cercando di stampare tutte le directory virtuali esistenti in IIS e le informazioni specificate che ho elencato in alto.
user38725

Risposte:


12

Scrivi che non riesci a capire come recuperare:

  • Percorso fisico
    • è direttamente accessibile attraverso la non physicalPathconformità
  • Associazione pool di app
    • non ha senso, le applicazioni sono assegnate ai pool di app, le directory stesse non lo sono
  • Nome del sito
    • Sai già questo ( $Site.name)
  • Credenziali
    • Presumo che tu voglia solo il nome utente, se presente

Tutti questi potrebbero essere recuperati con alcune lievi modifiche al tuo script esistente:

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

Ora puoi esportare $AllVDirsin Xml, CSV o semplicemente stamparlo sull'host PowerShell.


2

Grazie @Mathias R. Jessen, mi sono dimenticato di questo post e sarei dovuto tornare perché l'ho capito quasi tutto. La tua sceneggiatura funziona perfettamente ed ecco la mia solo per S&G, non avevo capito che tutto ciò che dovevo fare era chiamare oggetti e proprietà.

$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 

            }

Inoltre, hai un altro problema e non sapevi se avessi la risposta, come avrei chiamato la proprietà delle credenziali del percorso fisico per le applicazioni web? Non riesco a stampare il nome utente o la password, ma posso stampare il logonMethod che utilizza la stessa proprietà? di seguito è riportato il mio codice per le applicazioni Web, è molto simile al mio codice delle directory virtuali:

$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

                        } 
            }

Sto anche pensando che se ottengo $ Site.userName e $ Site.password, non sarebbero gli stessi per l'app Web?
user38725

0

Ciò creerà un array che contiene il nome del sito, il nome della directory virtuale e il percorso fisico della directory virtuale.

$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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.