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

任务计划程序执行PowerShell脚本时Get-ChildItem访问远程目录失败

任务计划执行PowerShell远程日志检查脚本故障解决

核心问题分析

  1. NT-Authority\SYSTEM账户限制:该账户是本地系统账户,无法通过网络身份验证访问远程SMB共享(如\\$computer\c$),跨机器身份不被目标系统认可。
  2. 内置Administrator账户非交互式会话限制:无人登录时,任务运行在会话0(非交互式会话),默认无持久化网络凭据,导致SMB共享访问失败。

具体解决方案

方案1:改用WMI/WinRM远程执行(推荐)

绕过SMB共享,直接在远程机器上执行文件操作,避免网络凭据问题。修改脚本关键逻辑如下:

$date = Get-Date -format dd.MM.yy
$time = Get-Date -format HH:mm
$fileout = @()
$outputfile = "C:\Users\user\Desktop\logged_error.txt"
$computers = 'pc1','pc2'
$remoteLogDir = "C:\Program Files (x86)\Logcollector\diagnose"

foreach ($computer in $computers){
    # 远程获取最新日志文件
    try {
        $latestLog = Invoke-Command -ComputerName $computer -ScriptBlock {
            Get-ChildItem -Path $using:remoteLogDir -Include "SUITE_*" | 
                Sort-Object LastWriteTime -Descending | 
                Select-Object -First 1
        } -ErrorAction Stop

        if ($latestLog) {
            # 远程读取日志最后14行
            $logContent = Invoke-Command -ComputerName $computer -ScriptBlock {
                Get-Content -Path $using:latestLog.FullName -Tail 14
            } -ErrorAction Stop

            # 检查错误
            if ($logContent | Select-String -Pattern "WARNING","ERROR") {
                $fileout += "$computer 在 $date $time 时,日志最后14行包含错误/警告"
            } else {
                $fileout += "$computer 在 $date $time 时,日志最后14行无错误/警告"
            }
        } else {
            $fileout += "$computer 未找到匹配的SUITE_*日志文件"
        }
    } catch {
        $fileout += "$computer 远程执行失败:$($_.Exception.Message)"
    }

    # LOG 2 和 LOG 3 同理修改
}

$fileout | Out-File -FilePath $outputfile -Encoding ascii

前置配置:

  • 远程机器启用WinRM:以管理员身份运行winrm quickconfig
  • 确保执行任务的账户(SYSTEM或管理员)加入远程机器的Remote Management Users本地组

方案2:持久化内置Administrator的网络凭据

若必须使用SMB共享,在有人登录时为目标机器添加持久化凭据:

  1. 以管理员身份打开命令提示符,执行:
    cmdkey /add:pc1 /user:pc1\Administrator /pass:你的管理员密码
    cmdkey /add:pc2 /user:pc2\Administrator /pass:你的管理员密码
    
  2. 验证凭据:执行cmdkey /list确认已添加

注意:需定期更新凭据以应对密码过期,同时确保密码安全。

方案3:调整本地安全策略(适用于工作组环境)

  1. 打开本地组策略编辑器(gpedit.msc)
  2. 导航至计算机配置→Windows设置→安全设置→本地策略→安全选项
  3. 修改网络访问: 本地账户的共享和安全模型为经典 - 本地用户以自己的身份验证
  4. 重启机器使策略生效

脚本健壮性优化建议

  • 添加远程共享可用性检查:
    if (-not (Test-Path "\\$computer\c$" -ErrorAction SilentlyContinue)) {
        $fileout += "$computer 无法访问远程共享目录"
        continue
    }
    
  • 增加日志文件空值判断:
    $log = Get-ChildItem -Path "\\$computer\c$\Program Files (x86)\Logcollector\diagnose\*" -Include "SUITE_*" | 
           Sort-Object LastWriteTime -Descending | 
           Select-Object -First 1
    if (-not $log) {
        $fileout += "$computer 未找到目标日志文件"
        continue
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 19:15:07