将PowerShell变量导出到一行中

时间:2014-09-30 12:58:26

标签: variables powershell csv

我正在编写一个基本的信息收集脚本,我们可以将其作为基于GPO的登录脚本丢弃在AD域上,以收集一些基本的库存信息。这是一个代码示例,其中包含我们要提取的几个项目:

$Model = (Get-WmiObject -Class:Win32_ComputerSystem).Model
$Serial = Get-WmiObject Win32_SystemEnclosure | select SerialNumber | findstr /C:"1" /C:"2"
$Hostname = get-content env:computername

(请忽略管道到findstr的序列号;这适用于戴尔环境。)我想将这些值写入CSV文件中的单行。在批处理中,这将简单如下:

echo %model%,%serial%,%hostname% >> info.csv

这就是我想要的那种输出:

host1,serial1,model1
host2,serial2,model2
host3,serial3,model3

但充其量我能够实现以下目标:

host1
serial1
model1
host2
serial2
model2

我已经玩了一段时间了,由于某种原因,我很难将这些变量导出到一行中。有没有办法像这样格式化输出?

3 个答案:

答案 0 :(得分:1)

我认为你需要使用Add-Content

Add-Content -Path c:\temp\csv.csv -Value '"$Hostname","$Serial","$Model"'

这将在带有引号,逗号分隔符号的文本文件中生成一行。如果您要定位多台计算机,则可以在ForEach循环中轻松实现此目的。

答案 1 :(得分:0)

您可以使用与批处理相同的方法:

echo "$model,$serial,$hostname" >> info.csv

答案 2 :(得分:0)

仅使用Powershell 10.0.18进行测试

以下命令可用于写入文件:

$theProcess = (Get-Process TheProcessYouWantToCheck)

while (1) {
    Write-Host $theProcess.name, $theProcess.cpu
    Add-Content -Path C:\folder\output.txt -Value "$($theProcess.name), 
    $($theProcess.cpu)"
    Start-Sleep 1
    Clear-Host
}