PowerShell命令输出格式化求助:生成无引号的CSV文件
解决PowerShell导出无引号CSV的问题
你的问题主要来自两个地方:一是手动给路径字段添加了额外引号,二是Export-Csv默认会为含特殊字符的字段自动套引号。下面分PowerShell版本给出针对性解决方案:
方案1:PowerShell 7及以上版本(推荐)
PowerShell 7+的Export-Csv新增了-UseQuotes Never参数,能直接禁止所有引号添加,同时我们要去掉手动拼接引号的逻辑:
# 定义注册表目标路径 $regPath = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\*" # 获取数据并导出为无引号CSV Get-ItemProperty -Path $regPath | Where-Object { $_."(default)" -ne $null } | Select-Object @{Name='Programs'; Expression={$_.PSChildName}}, @{Name='Executables'; Expression={$_."(default)"}} | Export-Csv -Path .\programs.csv -Encoding ASCII -NoTypeInformation -UseQuotes Never
关键调整说明:
- 把原列名
Program、CommandLine改成你需要的Programs、Executables - 移除了手动拼接引号的
$q + ... + $q逻辑,注册表默认值本身就是可执行文件路径,无需额外加引号 -UseQuotes Never强制导出时不添加任何引号
方案2:Windows PowerShell 5.1版本
如果还在使用Windows PowerShell 5.1(无-UseQuotes参数),可以先转成CSV字符串再批量移除引号:
$regPath = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\*" Get-ItemProperty -Path $regPath | Where-Object { $_."(default)" -ne $null } | Select-Object @{Name='Programs'; Expression={$_.PSChildName}}, @{Name='Executables'; Expression={$_."(default)"}} | ConvertTo-Csv -NoTypeInformation | ForEach-Object { $_ -replace '"', '' } | Out-File -Path .\programs.csv -Encoding ASCII
关键调整说明:
ConvertTo-Csv先把对象转为CSV格式的字符串数组ForEach-Object { $_ -replace '"', '' }批量移除所有引号Out-File按ASCII编码写入文件
额外优化:处理注册表原生引号
如果注册表的(default)值本身就带引号(比如带空格的路径会被引号包裹),可以用Trim('"')先清理原生引号:
@{Name='Executables'; Expression={$_."(default)".Trim('"')}}
内容的提问来源于stack exchange,提问作者blaine vautour
相关产品推荐
相关产品推荐

