2017-05-15 8 views
1

인터넷의 도움으로 하드웨어 정보를 수집하고이를 CSV 파일로 내보내는 기본 PowerShell 스크립트를 작성했습니다. 그것은 수집 :하드웨어 정보 스크립트 문제 해결

  • 호스트 이름
  • CPU
  • NumberOfCores
  • GPU
  • RAM

스크립트가 여전히 HDD 정보 (용량, 여유 공간, ID)를 얻을 필요가 , IPv4 주소 및 MAC.

$Name = hostname 
$Motherboard = Get-WmiObject Win32_BaseBoard 
$CPU = Get-WmiObject Win32_Processor 
$GPU = Get-WmiObject Win32_VideoController 
$RAM = Get-WmiObject Win32_ComputerSystem 

$To_File = new-object PSObject -property @{ 
    'Name' = $Name 
    'Motherboard' = $Motherboard.Product 
    'CPU' = $CPU.Name 
    'Cores' = $CPU.NumberOfCores 
    'GPU' = $GPU.Name 
    'RAM' = "{0:N2}" -f ($RAM.TotalPhysicalMemory/1GB) 
} 

$To_File | Select-Object Name, Motherboard, CPU, Cores, GPU, RAM | 
    Export-Csv G:\$Name.csv 

이전에 필자는 IP와 MAC을 얻기위한 라인을 가지고 있었지만, 보편적으로 작동하지는 않았습니다. 그것은이처럼 보였다 :

$IP = gwmi Win32_NetworkAdapterConfiguration | Where ($_.DNSDomain -eq 'lan') 
$MAC = gwmi Win32_NetworkAdapterConfiguration | Where ($_.DNSDomain -eq 'lan') 

그럼 난 그냥 $To_File 객체 'IP' = $IP.IPAddress하고 모든 어댑터가 "LAN"라는 사람이 아닙니까 때문에 좋지 않았다 'MAC' = $MAC.MacAddress

에서 사용할 수 있습니다. HDD의 경우

내가 쓴 : 일부 컴퓨터가 하나 개 이상의 HDD를했지만, 나는이 두 가지를 결합 할 수있는 방법 내가 하나와 하드 디스크의 위의 모든 정보를 가질 수 있도록 내가 아는하지 않았기 때문에

$Disk = Get-WmiObject Win32_LogicalDisk -Filter drivetype=3 

$DiskInfo = foreach ($zm in $Disk) { 
    'ID: ' + $zm.DeviceID 
    'Capacity: ' + "{0:N2}" -f ($zm.Size/1GB) 
    'Free Space: ' + "{0:N2}" -f ($zm.FreeSpace/1GB) 
} 

파일.

원격으로 모든 작업을 수행 할 수 없으므로 스크립트가 USB 드라이브에 있고 각 컴퓨터로 이동하여 직접 실행합니다. 나는 아직도 약 20 대의 기계를 사용해야 만한다.

또한 기존 CSV 파일에 새 행을 추가 할 수있는 방법을 알고 싶습니다. 15 개의 CSV가 있고이를 병합하면 고통 스럽습니다.

+0

여러 가지 질문이 있습니다. 한 번에 한 가지 문제에 집중하고, 문제를 해결하기 위해 시도한 것을 보여주고, 원하는 결과와 실제 결과물을 보여주고 예상대로 작동하지 않는 것을 설명하십시오. –

답변

1

export-csv 명령에 -append 명령을 사용하여 기존 행이있는 새 행을 추가하십시오. 귀하의 명령은 다음과 같을 것입니다

$To_File | Select-Object Name, Motherboard, CPU, Cores, GPU, RAM | 
Export-Csv G:\$Name.csv -NoTypeInformation -Append 

Powershell - Export-CSV and Append 링크가 도움이 될 것 같습니다.