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

PowerShell脚本检查CSV中计算机名避免重复写入

问题解决脚本及说明

先明确你原脚本里的几个核心问题:

  • 原脚本中Export-Csv -Path $csv是错误用法,$csv是Import-Csv读取的对象集合,不是文件路径,应该直接传入UNC路径
  • 无效脚本里$file变量未定义,且直接用-contains判断对象数组不对,必须先提取CsDNSHostName列的所有值再做判断

修正后的完整脚本:

# 定义参数
$csvPath = '\\UNC\PATH\file.csv'
$currentHostName = $env:COMPUTERNAME
$props = 'CsSystemFamily','CsDNSHostName', 'CsManufacturer'

# 检查CSV文件是否存在
if (Test-Path -Path $csvPath) {
    # 读取现有CSV并提取已存在的主机名列表
    $existingData = Import-Csv -Path $csvPath -Delimiter ';'
    $existingHostNames = $existingData.CsDNSHostName
} else {
    # 文件不存在时,初始化空数组
    $existingHostNames = @()
}

# 判断当前主机名是否已存在
if ($existingHostNames -contains $currentHostName) {
    Write-Host "计算机名 $currentHostName 已存在于CSV中,跳过写入"
} else {
    # 获取当前计算机信息并追加到CSV
    Get-ComputerInfo | Select-Object -Property $props | Export-Csv -Path $csvPath -NoTypeInformation -Delimiter ';' -Append
    Write-Host "已成功写入计算机 $currentHostName 的信息"
}

关键说明:

  • Test-Path检查文件存在:避免第一次运行时CSV未创建导致Import-Csv报错
  • 提取CsDNSHostName列:把CSV里的所有主机名转换成字符串数组,这样-contains才能正确判断
  • 修正Export-Csv路径参数:直接传入UNC路径,而非Import-Csv返回的对象
  • -Append模式:确保新数据不会覆盖原有内容

GPO部署额外注意:

  • 要保证执行脚本的计算机账户拥有UNC路径的写入权限,否则会执行失败
  • 可自行添加try/catch块捕获权限或其他异常,方便排查问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 08:01:33