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

如何修改PowerShell脚本,用计算机名替代IP显示锁定文件信息?

解决Get-SmbOpenFile输出IP转计算机名并整合到管道的方案

直接用以下PowerShell脚本即可实现IP到计算机名的解析,并整合到原有管道流程中,同时处理解析失败的情况:

Get-SmbOpenFile | ForEach-Object {
    # 尝试将客户端IP解析为计算机名
    try {
        $resolvedName = [System.Net.Dns]::GetHostEntry($_.ClientComputerName).HostName
        # 若解析结果为FQDN,仅提取主机名部分
        if ($resolvedName -match '^([^.]+)\.') {
            $resolvedName = $matches[1]
        }
    }
    catch {
        # 解析失败时保留原IP,并输出警告信息
        $resolvedName = $_.ClientComputerName
        Write-Warning "无法解析IP $($_.ClientComputerName) 的计算机名:$_"
    }

    # 输出包含解析后计算机名的自定义对象
    [PSCustomObject]@{
        锁定文件路径 = $_.Path
        操作用户名   = $_.ClientUserName
        客户端计算机 = $resolvedName
        文件打开时间 = $_.OpenTime
        会话ID       = $_.SessionId
    }
} | Export-Csv -Path "C:\FileLocks\LockedFiles_$(Get-Date -Format 'yyyyMMdd_HHmmss').csv" -NoTypeInformation -Encoding UTF8

关键逻辑说明

  • 通过ForEach-Object遍历每个SMB打开文件对象,对ClientComputerName字段(即客户端IP)执行DNS解析
  • 用try/catch块捕获解析失败的异常(比如客户端未注册DNS、网络不通),避免脚本中断,同时保留原IP作为 fallback
  • 对解析出的完全限定域名(FQDN)进行截取,只保留主机名,更符合员工查看习惯
  • 自定义输出对象保留核心信息,最后导出为带时间戳的CSV文件,方便员工随时查看

定时执行设置

要实现每5分钟自动生成列表,可通过Windows任务计划程序配置:

  • 创建新任务,触发器选择「按计划」,设置为每5分钟执行一次
  • 操作选择「启动程序」,程序路径填powershell.exe,参数填-ExecutionPolicy Bypass -File "你的脚本完整路径.ps1"
  • 任务运行账号需具备访问SMB文件锁定信息的权限(如域管理员或文件服务器本地管理员)

实时查看优化

如果需要员工实时查看锁定列表,可将脚本最后一行的导出CSV改为:

| Out-GridView -Title "当前文件锁定状态"

这样会弹出可视化窗口,直接展示所有锁定文件及对应的客户端信息

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 00:15:35