You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

以SYSTEM身份运行Get-ChildItem出现间歇性访问被拒绝错误

问题根因分析

你遇到的间隔报错问题完全是代码逻辑错误导致的,具体问题如下:

  • 核心逻辑错误:PSDrive的创建分支写反
    当前代码逻辑为:如果drv盘已存在就仅删除,不创建新IP对应的PSDrive;仅当drv盘不存在时才创建。第一次循环时drv不存在,创建IP1对应的PSDrive,访问正常;第二次循环drv已存在,仅删除不创建IP2的PSDrive,直接访问UNC路径无有效凭据,报错;第三次循环drv已被删除,创建IP3对应的PSDrive,访问正常;第四次循环drv存在,仅删除不创建,又报错,完全匹配你间隔报错的现象。
  • 凭据未正确关联到访问路径
    你给\\$ipaddress\C$创建了带凭据的PSDrive,但Get-ChildItem访问的是UNC路径而非drv:盘,默认状态下PSDrive的凭据不会自动应用到同IP的其他UNC路径访问请求上,SYSTEM身份本身无默认远程访问权限,直接访问自然报错。
  • SMB会话清理逻辑错误
    Finally块中执行net use删除的路径是\\$ipaddress\$folderpath,但你实际建立的SMB连接根路径是\\$ipaddress\C$,清理路径不匹配会导致SMB会话残留,后续同IP访问会复用无效会话。
修复后代码
#Set Variables
$pw = Read-Host -AsSecureString "Enter password"
$usrname = 'username'
$folderpath = 'Folder\Subfolder1\Subfolder'

#Loop
foreach ($ipaddress in Get-Content -Path .\DeviceIPList.txt) {
    $credential = New-Object System.Management.Automation.PsCredential("$ipaddress\$usrname",$pw)
    Try {
        # 每次循环先清理旧的PSDrive,不管是否存在
        if (Test-Path drv:) {
            Remove-PSDrive "drv" -Force -ErrorAction SilentlyContinue
        }
        # 每次都新建当前IP的PSDrive,加Scope Global确保SYSTEM身份下全局生效
        New-PSDrive -Name "drv" -PSProvider FileSystem -Root "\\$ipaddress\C$" -Credential $credential -Scope Global -ErrorAction Stop | Out-Null
        
        # 直接用挂载的drv盘访问,确保凭据生效
        $vhdfile = Get-ChildItem -path "drv:\$folderpath" -ErrorAction Stop    
        Write-Host -ForegroundColor Green "$ipaddress,Found $vhdfile in C:\$folderpath"
        Write-Output "$ipaddress,Found $vhdfile in C:\$folderpath" | Out-File -Append .\Report.txt
    }
    Catch [System.ComponentModel.Win32Exception] {
        Write-Host -ForegroundColor Cyan "$ipaddress,$_"
        Write-Output "$ipaddress,$_" | Out-File -Append .\Report.txt
    }
    Catch {
        Write-Host -ForegroundColor Yellow "$ipaddress,$_"
        Write-Output "$ipaddress,$_" | Out-File -Append .\Report.txt
    }
    Finally {
        $error.Clear()
        # 双重清理避免SMB会话残留
        if (Test-Path drv:) {
            Remove-PSDrive "drv" -Force -ErrorAction SilentlyContinue
        }
        net use \\$ipaddress\C$ /d /y 2>&1>$null
        Start-Sleep -Seconds 1
    }
}

内容的提问来源于stack exchange,提问作者Aaron

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 23:27:00