如何使用 Powershell 重命名 IIS 网站目录(访问被拒绝错误)
How to rename IIS website directory with Powershell (Access denied error)
我正在尝试编写一个 powershell 部署脚本来停止网站、重命名一些目录并重新启动网站,但我卡在了重命名部分。有时我可以重命名目录,但大多数时候我会收到 "Access to the path 'xxx' is denied." 错误。我每次都需要这个脚本。
我是 运行 管理员,我正在使用 -Force,我什至在停止网站并重试后等待 10 秒。我检查了使用该目录的进程,但只显示 w3wp.exe。 (FWIW,发生这种情况时,我也无法通过文件资源管理器重命名目录 - "The action can't be completed because the folder is open in another program.")
相关代码:
#rename the IIS directory
$renamed = $false
if($success -and $status.value -eq "Stopped")
{
Write-Host ("renaming " + $stagingPath)
try
{
Rename-Item -Path $stagingPath -NewName $tempPath -ErrorAction Stop
}
catch
{
Write-Host("An error occurred during renaming. Retrying ...")
Start-Sleep -s 10
Rename-Item -Path $stagingPath -NewName $tempPath -Force -ErrorAction Stop
}
if(Test-Path $tempPath)
{
$renamed = $true
Get-ChildItem
Write-Host("IIS site renamed to " + $tempPath)
}
else
{
Write-Host("ERROR: Renaming to temp failed")
}
}
($stagingPath 和 $tempPath 只是目录名,不是完整路径。绝对正确。)
我错过了什么?我是否也需要明确停止应用程序池?
要回答我自己的问题,是的,除了停止网站以释放 w3wp.exe 进程外,您还需要明确停止 AppPool。一旦我添加:
Stop-WebAppPool -Name $stagingAppPoolName
在我停止网站后添加到我的脚本中,它运行良好。我能够无误地重命名目录。感谢您提供有关停止进程的有用提示。
我正在尝试编写一个 powershell 部署脚本来停止网站、重命名一些目录并重新启动网站,但我卡在了重命名部分。有时我可以重命名目录,但大多数时候我会收到 "Access to the path 'xxx' is denied." 错误。我每次都需要这个脚本。
我是 运行 管理员,我正在使用 -Force,我什至在停止网站并重试后等待 10 秒。我检查了使用该目录的进程,但只显示 w3wp.exe。 (FWIW,发生这种情况时,我也无法通过文件资源管理器重命名目录 - "The action can't be completed because the folder is open in another program.")
相关代码:
#rename the IIS directory
$renamed = $false
if($success -and $status.value -eq "Stopped")
{
Write-Host ("renaming " + $stagingPath)
try
{
Rename-Item -Path $stagingPath -NewName $tempPath -ErrorAction Stop
}
catch
{
Write-Host("An error occurred during renaming. Retrying ...")
Start-Sleep -s 10
Rename-Item -Path $stagingPath -NewName $tempPath -Force -ErrorAction Stop
}
if(Test-Path $tempPath)
{
$renamed = $true
Get-ChildItem
Write-Host("IIS site renamed to " + $tempPath)
}
else
{
Write-Host("ERROR: Renaming to temp failed")
}
}
($stagingPath 和 $tempPath 只是目录名,不是完整路径。绝对正确。)
我错过了什么?我是否也需要明确停止应用程序池?
要回答我自己的问题,是的,除了停止网站以释放 w3wp.exe 进程外,您还需要明确停止 AppPool。一旦我添加:
Stop-WebAppPool -Name $stagingAppPoolName
在我停止网站后添加到我的脚本中,它运行良好。我能够无误地重命名目录。感谢您提供有关停止进程的有用提示。