使用Remove-Item批量删除Windows更新缓存文件异常,但单个文件删除正常的问题求助
Remove-Item批量删除Windows更新缓存文件异常,但单个文件删除正常的问题求助
我现在要写一个PowerShell脚本,给一批远程机器(通过PSSession连接)停止Windows更新服务,同时清理C:\Windows\SoftwareDistribution\下的更新缓存。逻辑看起来很简单,但卡在删除缓存目录里的文件和文件夹这一步了。
先给大家看看我脚本里针对单台机器的核心代码:
foreach ($machine in $csv) { try { # 建立远程会话 $session = New-PSSession -ComputerName $machine.Name -ErrorAction Stop # 停止Windows更新服务 Invoke-Command -Session $session -ScriptBlock {Stop-Service -Name 'wuauserv' -Force} # 删除更新缓存文件夹内容 Invoke-Command -Session $session -ScriptBlock { Start-Sleep -Seconds 1 # 最初尝试的写法,报错路径找不到或目录非空 # Remove-Item -Path 'C:\Windows\SoftwareDistribution\' -Recurse -Force # 后来换成这种写法,但出现权限拒绝错误 Get-ChildItem -Path 'C:\Windows\SoftwareDistribution\' -Recurse -Force | Remove-Item -Recurse -Force } # 重启Windows更新服务 Invoke-Command -Session $session -ScriptBlock { Start-Sleep -Seconds 1 Start-Service -Name 'wuauserv' } # 计划晚上9点重启机器 Invoke-Command -Session $session -ScriptBlock{ [datetime]$restartTime = '9PM' [datetime]$currentTime = Get-Date [int]$restartDelay = ($restartTime - $currentTime).TotalSeconds shutdown -r -t $restartDelay } Remove-PSSession $session $outcome = 'Completed' } # 此处省略异常处理代码 }
遇到的具体问题:
- 一开始用
Remove-Item -Path 'C:\Windows\SoftwareDistribution\' -Recurse -Force批量删除,总是报错说路径找不到或者目录不为空;查资料后换成Get-ChildItem遍历再删除的写法,结果又碰到权限拒绝的错误。 - 我试过调整写法为
Get-ChildItem -Path 'C:\Windows\SoftwareDistribution\' -Recurse | foreach { Remove-Item $_.FullName -Recurse -Force },还是出现同样的权限问题。 - 我是所有目标机器的本地管理员,权限完全足够:不管是在文件资源管理器里手动删除,还是用
Remove-Item单个删除文件/文件夹都没问题,但一批量递归删除就触发权限拒绝报错。 - 我特意在本地机器上测试了这段删除逻辑,排除了PSSession远程连接的影响,结果还是一样的错误。
- 怀疑过是文件被进程锁定,但实际检查后发现没有锁定情况——毕竟单个删除操作都能成功。
折腾好一阵了还是没找到解决办法,有没有大佬能给点思路?
内容来源于stack exchange
相关产品推荐
相关产品推荐

