如何在单行中输出Powershell脚本并以;分隔



我不能这样做,我只想输出。txt一行,每个输出后跟;

New-Item C:temptest.txt
Set-Content C:temptest.txt (Get-CimInstance Win32_PhysicalMemory | Measure-Object -Property capacity -Sum | Foreach {"{0:N2}" -f ([math]::round(($_.Sum / 1GB),2))}) 
Add-Content C:temptest.txt (Get-CimInstance -ClassName Win32_Processor).name 
Add-Content C:temptest.txt (Get-WmiObject Win32_OperatingSystem).caption 
Add-Content C:temptest.txt (Get-CimInstance -ClassName Win32_VideoController).name

您可以将输出写入数组,并使用-join使用自定义分隔符

写入数组元素。
mkdir C:temp
@((Get-CimInstance Win32_PhysicalMemory | Measure-Object -Property capacity -Sum | Foreach {"{0:N2}" -f ([math]::round(($_.Sum / 1GB),2))}),
(Get-CimInstance -ClassName Win32_Processor).name,
(Get-WmiObject Win32_OperatingSystem).caption,
(Get-CimInstance -ClassName Win32_VideoController).name
) -join ';' > C:temptest.txt

注意Get-CimInstance -ClassName Win32_VideoController将返回系统中所有gpu的信息,所以如果你有多个gpu(例如混合图形系统),那么它将打印多行而不是一行。所以你可能需要用(Get-CimInstance -ClassName Win32_VideoController).name -join ','代替,或者(Get-CimInstance -ClassName Win32_VideoController)[0].name如果你只想要第一个显卡

如果系统中有多个物理cpu,我猜Get-CimInstance -ClassName Win32_Processor也会发生同样的事情

您需要同时使用-NoNewLine开关,Set-ContentAdd-Content与您已经拥有的字符串连接相结合:

$file = New-Item test.txt
Get-CimInstance Win32_PhysicalMemory |
Measure-Object -Property Capacity -Sum |
ForEach-Object {"{0:N2}" -f ([math]::Round(($_.Sum / 1GB),2))} |
Set-Content -LiteralPath $file -NoNewline
';' + (Get-CimInstance -ClassName Win32_Processor).Name | Add-Content -LiteralPath $file -NoNewline
';' + (Get-CimInstance Win32_OperatingSystem).Caption | Add-Content -LiteralPath $file -NoNewline
';' + (Get-CimInstance -ClassName Win32_VideoController).Name | Add-Content -LiteralPath $file
然而,值得注意的是,将内存中cmdlet的所有输出连接起来并只输出一次到文件中会容易得多,对于本例,我们可以使用-f格式操作符:
$file = New-Item test.txt
'{0:N2};{1};{2};{3}' -f 
[math]::Round((((Get-CimInstance Win32_PhysicalMemory).Capacity | Measure-Object -Sum).Sum / 1Gb), 2),
(Get-CimInstance -ClassName Win32_Processor).Name,
(Get-CimInstance Win32_OperatingSystem).Caption,
(Get-CimInstance -ClassName Win32_VideoController).Name | Set-Content -LiteralPath $file

最新更新