创建虚拟目录并将其转换为 WebApplication 时,为什么输出显示两个条目

When creating a virtual directory and converting it to a WebApplication, why does the output show two entries

我创建了一个 PowerShell 脚本来创建虚拟目录并将其转换为具有现有物理路径的 WebApplication。 它有效,但我发现奇怪的是,在将其转换为 WebApplication 时,输出显示两个条目。

Name PhysicalPath       
---- ------------       
v2   E:\inetpub\MyWebsite\v2
v2   E:\inetpub\MyWebsite\v2

我尝试了不同的方法来创建虚拟文件夹和 WebApplication。

function Create-VirtualDirectory-With-AppPool {
    Param (
    [string] $WebSiteName,
    [string] $VirtualFolderName,
    [string] $AppPoolName
    )
    $PhysicalPathWebSite = (Get-Website -Name $WebSiteName | Select-Object).PhysicalPath
    $PhysicalPathVirtDir = "$PhysicalPathWebSite$VirtualFolderName"

    Write-Host "The following will be created:"
    Write-Host "- Virtual folder: $WebSiteName$VirtualFolderName with physical path: $PhysicalPathVirtDir"
    Write-Host "- Application: IIS:\Sites$WebSiteName$VirtualFolderName"
    Read-Host "Press enter to continue (Ctrl-c to abort)"
        
    New-WebVirtualDirectory -Site $WebSiteName -Name $VirtualFolderName -PhysicalPath $PhysicalPathVirtDir
    # Other attempt, same result:
    #New-Item "IIS:\Sites$WebSiteName$VirtualFolderName" -type VirtualDirectory -physicalPath $PhysicalPathVirtDir

    ConvertTo-WebApplication "IIS:\Sites$WebSiteName$VirtualFolderName"
    # Other attempt, same result:
    #New-Item "IIS:\Sites$WebSiteName$VirtualFolderName" -type Application -physicalPath $PhysicalPathVirtDir
    
    # Set AppPool
    Set-ItemProperty "IIS:\Sites$WebSiteName$VirtualFolderName" -name applicationPool -value $AppPoolName

    Write-Host "Done."
}

我是不是做错了什么? 有缓存吗?

确实如Mathias所说。 在为虚拟目录和转换为 WebApplication 使用管道传输到 | Out-Null 时,我看到了单独的输出。

因此,有两种选择:丢弃输出或将输出放在变量中并添加一些文本。我选最后一个。

function Create-VirtualDirectory-With-AppPool {
    Param (
    [string] $WebSiteName,
    [string] $VirtualFolderName,
    [string] $AppPoolName
    )
    $PhysicalPathWebSite = (Get-Website -Name $WebSiteName | Select-Object).PhysicalPath
    $PhysicalPathVirtDir = "$PhysicalPathWebSite$VirtualFolderName"

    Write-Host "The following will be created:"
    Write-Host "- Virtual folder: $WebSiteName$VirtualFolderName with physical path: $PhysicalPathVirtDir"
    Write-Host "- Application: IIS:\Sites$WebSiteName$VirtualFolderName"
    Read-Host "Press enter to continue (Ctrl-c to abort)"
        
    $OutputNewvDir = New-WebVirtualDirectory -Site $WebSiteName -Name $VirtualFolderName -PhysicalPath $PhysicalPathVirtDir

    $OutputConvertApp = ConvertTo-WebApplication "IIS:\Sites$WebSiteName$VirtualFolderName"
    
    # Set AppPool
    Set-ItemProperty "IIS:\Sites$WebSiteName$VirtualFolderName" -name applicationPool -value $AppPoolName

    Write-Host "New Virtual directory: $($OutputNewvDir | Format-List | Out-String)"
    Write-Host "Convert to Application: $($OutputConvertApp | Format-List | Out-String)"

    Write-Host "Done."
}
New Virtual directory: 

Name         : V2
PhysicalPath : C:\inetpub\wwwroot\MyWebsite\V2

Convert to Application: 

Path             : /V2
ApplicationPool  : DefaultAppPool
EnabledProtocols : http
PhysicalPath     : C:\inetpub\wwwroot\MyWebsite\V2

一个奇怪的事情是两个命令都有不同数量的参数,但有些是一起输出时显示的(如我原来的问题所示)。 不过我可以接受,以后再研究。