目前我正在尝试运行此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"
答案 0 :(得分:62)
错误消息:
Start-Website:当该文件已存在时,无法创建文件。
...通常意味着你有一个绑定冲突,其中已经有一个站点在同一个IP地址,端口上运行,如果你正在使用它们,那么主机头。
我会在IIS MMC中检查您的新网站绑定,然后查明其他内容是否使用完全相同的绑定。
答案 1 :(得分:0)
在IIS配置中没有任何网站时,发生了同样的错误。原因是applicationHost.config末尾的其他旧记录。这些都不会在IIS管理器中可见。删除这些XML记录后,问题就解决了。
答案 2 :(得分:0)
启用详细的错误跟踪以查找原因。就我而言,这是一个mimeType
元素,它复制了一个默认元素。
答案 3 :(得分:0)
我也遇到了同样的错误。当我尝试同时使用来自不同代理计算机的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()