如何用PowerShell合并两列至无空格分隔的单列并输出到TXT文件
解决PowerShell批量生成命令文本时命令与序列号间多余空格的问题
我需要批量生成可执行的命令文本,要求命令与序列号两部分之间无空格。现有脚本虽能生成TXT文件,但输出内容里命令和序列号之间会多出空格,不符合格式要求。
现有脚本
$command = "My command I need to run:" #prompt user for Destination OrgUnit $OrgUnit = Read-Host "Paste the destination orgUnit here:" #grab csv of serial numbers Import-CSV -Path C:\CSV\serials.csv -Header serialnumber | ForEach-Object { [PSCustomObject] @{ "myCommand" = $command "Serial" = $_.serialnumber "OrgUnit" = $OrgUnit } } | Out-File C:\CSV\Command.txt
问题说明
原脚本输出的TXT文件中,命令(如My command I need to run:)与序列号之间会自动出现空格,例如:
My command I need to run: ABC1234 OU=Test,DC=domain,DC=com
而期望的格式是命令与序列号直接连接,无空格:
My command I need to run:ABC1234 OU=Test,DC=domain,DC=com
解决方法
方法1:事后替换(已采用的方案)
读取生成的文本文件,将命令末尾的: 替换为:,消除多余空格:
(Get-Content C:\CSV\Command.txt).replace(": ", ':') | Set-Content C:\CSV\Command.txt
方法2:根源避免(更优方案)
原问题的本质是输出PSCustomObject时,PowerShell会自动为不同属性添加空格分隔。可以直接在生成时拼接字符串,跳过对象输出步骤,从根源避免空格问题:
$command = "My command I need to run:" $OrgUnit = Read-Host "Paste the destination orgUnit here:" Import-CSV -Path C:\CSV\serials.csv -Header serialnumber | ForEach-Object { # 直接拼接命令、序列号和组织单元,无多余空格 "$command$($_.serialnumber) $OrgUnit" } | Out-File C:\CSV\Command.txt
这样生成的文本会直接符合格式要求,无需后续替换操作。
内容的提问来源于stack exchange,提问作者crustmc
相关产品推荐
相关产品推荐

