我的任务是收集大约3-400台笔记本电脑和笔记本电脑的数据。出于安全原因,必须在每台机器上逐个本地完成任务。
有人能指出我使用PowerShell或批处理脚本的正确方向,以获取详细信息。
我尝试使用以下批处理脚本:
for /f "skip=1 tokens=1" %%A in ('wmic csproduct get identifyingnumber /value') do set asset=%%A
echo %%A,%computername%,%username% >> "file.csv"
但是这没有用,因为wmic命令在末尾有一个空行并用空白覆盖%%A
。
请帮助一个菜鸟:)
提前谢谢。
答案 0 :(得分:1)
for /f "tokens=2 delims==" %%a in ('
wmic csproduct get identifyingnumber /value
') do for /f "delims=" %%b in ("%%a") do (
>>"file.csv" echo(%%b,%computerName%,%username%
)
/value
命令中的wmic
开关要求以key=value
格式输出。 for
将使用等号作为分隔符来对行进行标记,仅检索第二个标记,即值。当我们请求第二个令牌时,唯一包含两个令牌的行是带有数据的行,不需要跳过或过滤输出。
此外,wmic
的输出在行尾包含一个aditional回车符,因此第二个for
循环用于删除它。
已修改以适应评论
@echo off
setlocal enableextensions disabledelayedexpansion
for /f "delims=" %%a in ('
wmic csproduct get identifyingnumber^,name^,vendor /value
') do for /f "delims=" %%b in ("%%a") do set "_%%b"
for /f "delims=" %%a in ('
wmic useraccount where (name^="%username%"^) get fullname /value
') do for /f "delims=" %%b in ("%%a") do set "_%%b"
>>"file.csv" echo(%_fullname%,%username%,%_vendor%,%_name%,%computerName%,%_identifyingnumber%
在这种情况下采用简化方法。我们仍在检索key=value
格式,因此,使用此格式直接设置带有值的环境变量。需要一个附加查询来检索当前用户的全名( note :显然是为运行脚本的用户检索数据)
答案 1 :(得分:0)
您必须在每台机器上手动进行此操作吗?当单个WMI调用可以远程获取时没有问题,这似乎有点疯狂。
这是一种更简单的方法,可以在本地使用Powershell。
Get-WmiObject -Class Win32_Bios | Select-Object PSComputerName,SerialNumber | Export-Csv -Path computerserials.csv -Append -NoTypeInformation
在那里添加-Computername param以远程执行。
Get-WmiObject -Class Win32_Bios -Computername COMPUTERNAME | Export-Csv -Path computerserials.csv -Append -NoTypeInformation
要遍历一堆计算机名称,请创建一个文本文件,每行只有一个计算机名称,并执行类似的操作,但这需要您远程执行。
Get-WmiObject -Class Win32_Bios -Computername (Get-Content computerlist.txt) | Select-Object PSComputerName,SerialNumber | Export-Csv -Path computerserials.csv -Append -NoTypeInformation
这些示例是获取计算机名称和序列号。如果你还需要其他任何东西,它很容易直接从WMI中取出而不是使用WMIC的kludge。