PowerShell脚本TXT转CSV遇列配置问题:需计算机名与成员列
解决PowerShell TXT转CSV时的列配置问题
你的核心问题是原脚本没有正确识别计算机名和成员的对应关系,而是把每行内容按空格/逗号拆分成了多列。根据你的需求,以下提供两种针对性的解决方案,对应不同的TXT输入格式:
情况1:TXT每行包含计算机名和成员(用多空格分隔)
如果你的TXT文件格式是每行对应一个计算机-成员对,且两者用至少2个空格分隔(类似PC-01 DOMAIN\Admin1),使用以下脚本:
$inputFilePath = "\\path\localaccounts\path.txt" $outputFilePath = "\\path\localaccounts\path.csv" # 读取文件并跳过前两行冗余内容 $lines = Get-Content $inputFilePath | Select-Object -Skip 2 $results = foreach ($line in $lines) { # 跳过空行 if ([string]::IsNullOrWhiteSpace($line)) { continue } # 按至少2个空格分割为两部分,确保成员中含空格也不会被拆分 $parts = $line -split "\s{2,}", 2 if ($parts.Count -ge 2) { [PSCustomObject]@{ 计算机名 = $parts[0].Trim() 成员 = $parts[1].Trim() } } } # 导出为指定列的CSV $results | Export-Csv -NoTypeInformation -Path $outputFilePath -Encoding UTF8
情况2:TXT按组排列(计算机名单独一行,后续行是对应成员)
如果你的TXT格式是先出现计算机名,后续行是该计算机的管理员成员(类似:
PC-01 DOMAIN\Admin1 Local\User2 PC-02 DOMAIN\Admin2 ```),使用以下脚本: ```powershell $inputFilePath = "\\path\localaccounts\path.txt" $outputFilePath = "\\path\localaccounts\path.csv" $lines = Get-Content $inputFilePath | Select-Object -Skip 2 $currentComputer = $null $results = @() foreach ($line in $lines) { $line = $line.Trim() if ([string]::IsNullOrWhiteSpace($line)) { continue } # 简单判断:成员行包含反斜杠,计算机名不包含(可根据实际格式调整判断规则) if ($line -notmatch "\\") { $currentComputer = $line } else { if ($currentComputer) { $results += [PSCustomObject]@{ 计算机名 = $currentComputer 成员 = $line } } } } $results | Export-Csv -NoTypeInformation -Path $outputFilePath -Encoding UTF8
关键改进点
- 直接创建含
计算机名和成员属性的自定义对象,确保CSV输出固定列 - 针对不同的TXT格式调整分割/识别逻辑,避免无效拆分
- 加入空行过滤,提升脚本健壮性
内容的提问来源于stack exchange,提问作者nati
相关产品推荐
相关产品推荐

