2015-07-13 2 views
0

Цель: как извлечь информацию о сервере?Как извлечь информацию о сервере

Для каждого имени сервера, указанного в SERVERS.TXT, я хотел бы получить следующую информацию (в этом формате): имя, IP-адрес, название ОС, объем физической памяти, процессоры, каждый букву диска

сервера и размер, Системная модель

Запятая и новая линия для каждого сервера.

Ниже приведен мой код PowerShell. Могут ли ваши ребята дать понять, почему это не работает? Также почему я получаю сообщение об ошибке New-Object?

foreach ($ComputerName in (Get-Content -Path .\servers.txt)) { 
    $HashProps = @{ 
    'tHostname' = Get-WmiObject Win32_Computersystem -ComputerName $ComputerName | Select-Object -ExpandProperty Name 
    'tIP' = [System.Net.Dns]::GetHostAddresses($computername) 
    'tOS' = Get-WmiObject -ComputerName $ComputerName -Class Win32_OperatingSystem | Select-Object -ExpandProperty Caption 
    'tMemory' = Get-WmiObject Win32_PhysicalMemory | Measure-Object -Property capacity -Sum | foreach { "$("{0:n2}" -f ($_.Sum/1GB))" } 
    'tcpu' = Get-WmiObject Win32_processor | Select-Object name, numberofcores 
    'tDisks' = Get-WmiObject Win32_LogicalDisk | foreach { "$($_.DeviceID) $("{0:n2}" -f ($_.Size/ 1GB))" } 
    'tsysmodel' = Get-Wmiobject Win32_computersystem | Select-Object model 
    } 
    New-Object -TypeName psObject -Property $HashProps | 
    ConvertTo-Csv -NoTypeInformation | Out-File -Append .\output.csv 
} 

Я открыт для другого подхода, если это проще.

+2

Вам нужно определить «не работает» и объяснить, что ошибка, которую вы получите от 'New-Object'. – alroc

+0

@alroc: Это было что-то о том, что «Новый объект» был неожиданным. Если я не запускаю две последние строки, ошибка не появляется. Тогда работа над двумя последними строками отлично работает. Тем не менее, я не получаю информацию обо всех серверах и формате, который я ищу. Надеюсь, это поможет. – etyM

+3

Пожалуйста, не перефразируйте ошибки. Отправьте их * точно *, как они есть. Если потребуется вмешательство, мы это сделаем. –

ответ

0

Вы подтвердили, что каждая из этих строк действительно возвращает то, что вы хотите?

я просто выбросил это в ISE и она отлично работает:

$f = gwmi win32_computersystem | select name,model,totalphysicalmemory 
$hash = @{ 
    'name' = $f.name 
    'model' = $f.model 
    'memory' = $("{0:n2}" -f ($f.totalphysicalmemory/1GB)) 
} 
New-Object -TypeName psobject -Property $hash | ConvertTo-Csv -NoTypeInformation | Out-File -Append .\test.csv 

Кроме того, если вы хотите, чтобы свойства появляться в определенном порядке в CSV, это займет некоторое дополнительное волшебство, иначе они» re в алфавитном порядке.

0

Немного развалюха, может быть, это поможет вам:

$Servers = Foreach ($ComputerName in (Get-Content -Path .\Servers.txt)) { 
    $CS = Get-WmiObject Win32_ComputerSystem -ComputerName $ComputerName 
    $OS = Get-WmiObject Win32_OperatingSystem -ComputerName $ComputerName 
    $PM = Get-WmiObject Win32_PhysicalMemory -ComputerName $ComputerName 
    $PR = Get-WmiObject Win32_processor -ComputerName $ComputerName 
    $LD = Get-WmiObject Win32_LogicalDisk -ComputerName $ComputerName 
    $IP = [System.Net.Dns]::GetHostAddresses($ComputerName) 

    [PSCustomObject]@{ 
     ServerName = $CS | Select-Object -ExpandProperty Name 
     IPAddress = $IP | Select-Object -ExpandProperty IPAddressToString 
     OS   = $OS | Select-Object -ExpandProperty Caption 
     Memory  = $PM | Measure-Object -Property Capacity -Sum | foreach { "$("{0:n2}" -f ($_.Sum/1GB))" } 
     CPU  = $PR | Select-Object Name, NumberOfCores 
     Disks  = $LD | foreach { "$($_.DeviceID) $("{0:n2}" -f ($_.Size/ 1GB))" } 
     Model  = $CS | Select-Object -ExpandProperty Model 
    } 
} 

$File = Join-Path $env:TEMP 'Ouptut.csv' 
$Servers | Export-Csv -Path $File -NoTypeInformation -Delimiter ';' 
Start-Process $File 
Смежные вопросы