我想有一个powershell脚本,可以创建一个IIS网站。但我得到错误
新IIS站点:文件名:\?\C:\Windows\系统配置\应用程序主机. config错误:无法提交配置更改,因为磁盘上的文件已更改。位置:C:\projects\salonsecretSrc\RegisterWebSite.ps1:38 char:9 +新IIS站点绑定信息$strIssBindigFormat -名称$st...+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~类别信息:未指定:(:)[新IIS站点],文件加载异常+完全限定的错误ID:异常错误,错误代码为。
这是我剧本:
$strCurrentPath = $MyInvocation.MyCommand.Path
$strWebSiteFolder = Get-ChildItem (dir $strCurrentPath)
$strWebSiteBindingPath = $strWebSiteFolder.Directory.FullName+"\build\WebSite"
$strCurrentFolderName = $strWebSiteFolder.Directory.Name
$strIssSiteName = "$strCurrentFolderName.local"
$strIssBindigFormat = ":80:$strIssSiteName"
Write-Host "Current Script path: $strCurrentPath"
Write-Host "IIS Web Site phycical path: $strWebSiteBindingPath"
Write-Host "IIS SiteName: $strIssSiteName"
Write-Host "IIS Bindindg Format: $strIssBindigFormat"
Write-Host "Creating App Pool - $strIssSiteName"
New-WebAppPool -Name $strIssSiteName -Force
Write-Host "Creating Web Site Pool - $strIssSiteName"
New-IISSite -BindingInformation $strIssBindigFormat -Name $strIssSiteName -PhysicalPath "$strWebSiteBindingPath" -Force
Write-Host "Mapping Pull and Web Site - $strIssSiteName"
Set-ItemProperty "IIS:\Sites\$strIssSiteName" -name applicationPool -value $strIssSiteName
Write-Host "$strIssSiteName WebSite Created"
什么是如何解决问题?
它可以创建一个网站第一次,但第二次,如果我手动删除它,它会得到这个错误。
3条答案
按热度按时间wpcxdonn1#
有许多不同的东西可以锁定applicationHost.config文件并导致powershell命令(如
New-IISSite
)失败。在本例中,您提到您手动删除了该站点,因此可能您仍打开IIS管理器,并且它正在锁定该文件。我建议关闭IIS管理器。
正如这篇关于Powershell和IIS的博客文章中所描述的,Octopus Deploy的开发者发现,文件锁定问题的唯一可靠解决方案是将任何更改文件的命令(如
New-WebAppPool
) Package 在try-catch块中,并多次重试这些操作。实现此操作的函数的源代码可以在博客中找到。ssgvzors2#
看起来New-IISSite命令真的有问题。我最后回到New-Website(通过WebAdministration模块),所有的问题都消失了。
fnvucqvd3#
由于这是第一次进入谷歌关于这个问题,我将描述我的调查结果,以造成错误消息在这里。它可能不是有关的操作系统的问题。
失败代码示例
说明
如果在IISAdministration PowerShell Module中使用
Get-IISAppPool
,然后在WebAdministration PowerShell Module中使用New-WebAppPool
,则命令Get-IISAppPool
将以某种方式阻止New-WebAppPool
关闭applicationHost.config
文件,并可能使其处于打开状态。如果我们现在运行
New-IISSite
,我们将得到错误:New-IISSite : Filename: \\?\C:\Windows\system32\inetsrv\config\applicationHost.config Error: Cannot commit configuration changes because the file has changed on disk
如果按照上面描述的顺序,我也可以用其他命令来重现这一点:
1.从IIS管理模块获取-Cmdlet
1.新建- 来自Web管理模块的命令包
1.来自IIS管理模块的新IIS站点绑定
预防问题
为了解决这个问题,我找到了两个解决方案。
1.在执行
New-IISSite
之前删除IIS管理模块1.将
Get-IISAppPool
和New-WebAppPool
Package 为Start-IISCommitDelay
/Stop-IISCommitDelay
1.只使用其中一个模块。我决定只使用IIS管理模块。它不在Microsoft文档中,但您也可以使用
Get-IISServerManager
cmdlet创建/删除AppPools,如此处所述。解决方法1
解决方法2