我正在编写一个基本的信息收集脚本,我们可以将其作为基于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
我已经玩了一段时间了,由于某种原因,我很难将这些变量导出到一行中。有没有办法像这样格式化输出?
答案 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
}