在 Powershell 中运行 Start-Website 命令时出现“无法创建文件”错误

问题描述 投票:0回答:4

目前我正在尝试运行这个powershell脚本:

Param (
    $websiteName,
    $physicalPath
)

import-module WebAdministration
$website = get-website | where-object { $_.name -eq "$websiteName" }
if($website -eq $null){
    New-webapppool -Name "$websiteName"
    Set-WebConfiguration -filter "/system.applicationHost/applicationPools/add[@name='$websiteName']" -PSPath IIS:\ -value (@{managedRuntimeVersion="v4.0"})
    New-website -Name "$websiteName" -PhysicalPath "$physicalPath" -ApplicationPool "$websiteName"
    start-website "$websiteName"
}

我使用以下命令来运行脚本:

& .\InstallWebsite.ps1 -websiteName "MyWebsite" -physicalPath "C:\TEST\MyWebsite"

一切正常,除了 if 语句中的最后一个命令:

start-website "$websiteName"

当该命令运行时,我收到以下错误,但我无法成功解决该错误:

Start-Website : Cannot create a file when that file already exists. (Exception from HRESULT: 0x800700B7)
At line:1 char:14
+ start-website <<<<  "MyWebsite"
    + CategoryInfo          : InvalidOperation: (:) [Start-Website], COMException
    + FullyQualifiedErrorId : InvalidOperation,Microsoft.IIs.PowerShell.Provider.StartWebsiteCommand

如果重要的话,我还有以下脚本可以删除该网站:

Param (
    $websiteName,
    $appPoolName
)

import-module WebAdministration
$website = get-website | where-object { $_.name -eq "$websiteName" }
if($website -ne $null){
    remove-website -Name "$websiteName"
    remove-webapppool -Name "$websiteName"
}

我使用以下命令运行它:

& .\UninstallWebsite.ps1 -websiteName "MyWebsite" -appPoolname "MyWebsite"
powershell iis-7
4个回答
78
投票

错误信息:

Start-Website:当文件已存在时无法创建该文件。

...通常意味着您存在绑定冲突,其中已经有一个站点在相同的 IP 地址、端口以及主机标头(如果您正在使用它们)上运行。

我会检查 IIS MMC 中的新站点绑定,然后查明是否有其他东西正在使用完全相同的绑定。


2
投票

IIS配置中没有任何网站,也会出现同样的错误。原因是

applicationHost.config
末尾附加的旧记录。这些在 IIS 管理器中都不可见。删除这些XML记录后,问题就解决了。


1
投票

我遇到了同样的错误。当我尝试使用来自不同代理计算机的 Invoke-Command 将 WebBinding 远程添加到我的 IIS 站点时,会发生这种情况。

这对我有用,也许对某人也有帮助:

$Mutex = New-Object -TypeName System.Threading.Mutex($false, "Global\Mutex")    
if ($Mutex.WaitOne(300000)) {
   #For example
   #$Command = {
        #New-WebBinding -name $iis_site_name -Protocol https -HostHeader             
           #$iis_host_name -Port 443 -SslFlags 1
   #}
   #Invoke-Command -Command $Command
} else {
   Write-Warning "Timed out acquiring mutex!"
}
    
$Mutex.Dispose()

-1
投票

启用详细的错误跟踪以查找原因。就我而言,它是一个复制默认元素的

mimeType
元素。

在 IIS 7 中使用跟踪对失败的请求进行故障排除

© www.soinside.com 2019 - 2024. All rights reserved.