我不能这样做,我只想输出。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-Content
和Add-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