PowerShellのすべてのWebサイトからIISの仮想ディレクトリを一覧表示する方法


8

私は完全な障害にぶつかっており、の各Webサイトの仮想ディレクトリを印刷する方法がわかりませんIIS 8。私はアプリケーションと空のnull引数エラーを取得し続け、仮想ディレクトリを一覧表示する方法を見つけることができません。

仮想ディレクトリについて一覧表示するには、次のデータが必要です。

  • 物理パス
  • アプリプールの関連付け
  • サイト名
  • 資格情報

以下は、私が使用していたコードをいじっています。

    *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 

            }

仮想ディレクトリをアプリケーションに変換しない限り、仮想ディレクトリはサイトのアプリケーションプールを継承します。アプリケーションに変換される仮想ディレクトリと「通常の」仮想ディレクトリも探していますか?
jscott 14

$ jscott IISに存在するすべての仮想ディレクトリと、上にリストした特定の情報を出力したいと考えています。
user38725 2014

回答:


12

あなたはあなたがどのように検索するのか理解できないと書いています:

  • 物理パス
    • physicalPathnoteプロパティを通じて直接アクセスできます
  • アプリプールの関連付け
    • 意味がありません。アプリケーションはアプリケーションプールに割り当てられていますが、ディレクトリ自体はそうではありません
  • サイト名
    • あなたはすでにこれを知っています($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 

            }

また、別の問題があり、答えがあるかどうかわからなかった場合、Webアプリケーションの[物理パス]資格情報プロパティを呼び出すにはどうすればよいですか。ユーザー名またはパスワードを出力できませんが、同じプロパティを使用する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

                        } 
            }

また、$ Site.userNameと$ Site.passwordを取得した場合、それらはWebアプリでも同じではないでしょうか?
user38725 2014

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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.