PDA

Показать полную графическую версию : Данные о системе


Sergey666
12-04-2019, 08:37
Добрый день!
Сразу оговорюсь это мой первый код на PowerShell
Есть код, Выводит данные о системе. Но в итоговом файле почему-то получается много лишних пустых строк.
Для начала может кто-нибудь помочь это поправить?
Собственно сам код:

# Имя компьютера
"Имя компьютера" |out-file i:\\distrib\proc.txt
$systeminfo = Get-WmiObject -Class Win32_ComputerSystem
$name = '{0}.{1}' -f $systeminfo.DNSHostName, $systeminfo.Domain
$name |out-file i:\\distrib\proc.txt -append
# Операционная система
"Операционная система" |out-file i:\\distrib\proc.txt -append
$systeminfo = Get-CimInstance -ClassName Win32_OperatingSystem
$systeminfo | fl Caption, InstallDate |out-file i:\\distrib\proc.txt -append
# Процессор
"Процессор" |out-file i:\\distrib\proc.txt -append
$cpuinfo = Get-CimInstance -ClassName CIM_Processor
$cpuinfo | fl Name, CurrentClockSpeed |out-file i:\\distrib\proc.txt -append
# Оперативная память
"Оперативная память" |out-file i:\\distrib\proc.txt -append
Get-WMIObject -class win32_physicalmemory |
Measure-Object -Property capacity -Sum |
select @{N="Total Physical Ram"; E={[math]::round(($_.Sum / 1MB),2)}} |out-file i:\\distrib\proc.txt -append
# Свободное место на диске
"Свободное место на диске" |out-file i:\\distrib\proc.txt -append
Get-WmiObject Win32_LogicalDisk -Filter "DriveType=3" | Select DeviceID,@{Name="size(GB)";Expression={"{0:N1}" -f($_.size/1gb)}},@{Name="freespace(GB)";Expression={"{0:N1}" -f($_.freespace/1gb)}} | Format-Table -AutoSize |out-file i:\\distrib\proc.txt -append

Molchune
12-04-2019, 11:09
Вот ваш отредактированный


# Имя компьютера
$file="C:\temp\1.txt"
"Имя компьютера" |out-file $file
$systeminfo = Get-WmiObject -Class Win32_ComputerSystem
$name = '{0}.{1}' -f $systeminfo.DNSHostName, $systeminfo.Domain
$name |out-file $file -append
# Операционная система
"Операционная система" |out-file $file -append
$systeminfo = Get-CimInstance -ClassName Win32_OperatingSystem
($systeminfo | fl Caption, InstallDate |Out-String).trim()|out-file $file -append
# Процессор
"Процессор" |out-file $file -append
$cpuinfo = Get-CimInstance -ClassName CIM_Processor
($cpuinfo | fl Name, CurrentClockSpeed |Out-String).trim()|out-file $file -append
# Оперативная память
"Оперативная память" |out-file $file -append
(Get-WMIObject -class win32_physicalmemory |
Measure-Object -Property capacity -Sum |
select @{N="Total Physical Ram"; E={[math]::round(($_.Sum / 1MB),2)}} | Out-String).trim() |out-file $file -append
# Свободное место на диске
"Свободное место на диске" |out-file $file -append
(Get-WmiObject Win32_LogicalDisk -Filter "DriveType=3" | Select DeviceID,@{Name="size(GB)";Expression={"{0:N1}" -f($_.size/1gb)}},@{Name="freespace(GB)";Expression={"{0:N1}" -f($_.freespace/1gb)}} | Format-Table -AutoSize |Out-String).trim()|out-file $file -append


Добавляет он строчки из-за Format-List (fl). В вашем скрипте, просто сделал trim в каждом выводе.
Ну и так бонусом второй вариант



$file="C:\temp\2.txt"
$infoObject = New-Object PSObject
$OSInfo = Get-WmiObject Win32_OperatingSystem
$HOSTNAME = Get-WmiObject -Class Win32_ComputerSystem | select DNSHostName, Domain
$OS = Get-CimInstance -ClassName Win32_OperatingSystem | select Caption, InstallDate
$CPU = Get-CimInstance -ClassName CIM_Processor | Select Name, CurrentClockSpeed
$RAM=Get-WMIObject -class win32_physicalmemory | Measure-Object -Property capacity -Sum | select @{N="Total Physical Ram"; E={[math]::round(($_.Sum / 1MB),2)}}
$HDDFree=Get-WmiObject Win32_LogicalDisk -Filter "DriveType=3" | Select DeviceID, FreeSpace, Size

Add-Member -inputObject $infoObject -memberType NoteProperty -name "Имя компьютера" -value ($HOSTNAME.DNSHostName+"."+$HOSTNAME.Domain).trim()
Add-Member -inputObject $infoObject -memberType NoteProperty -name "ОС" -value $OS.Caption
Add-Member -inputObject $infoObject -memberType NoteProperty -name "Дата установки ОС" -value $OS.InstallDate
Add-Member -inputObject $infoObject -memberType NoteProperty -name "Процессор" -value $CPU.Name
Add-Member -inputObject $infoObject -memberType NoteProperty -name "Частота процессора" -value $CPU.CurrentClockSpeed
Add-Member -inputObject $infoObject -memberType NoteProperty -name "Оперативная память" -value $RAM.'Total Physical Ram'

foreach ($HDD in $HDDFree )
{
$Razdel=$HDD.DeviceID
Add-Member -inputObject $infoObject -memberType NoteProperty -name "Свободное место раздела $Razdel" -value ([math]::Round(($HDD.FreeSpace)/1gb))
Add-Member -inputObject $infoObject -memberType NoteProperty -name "Занятое место раздела $Razdel" -value ([math]::Round(($HDD.Size)/1gb))
}


($infoObject | fl * | Out-String).Trim() | out-file $file




Ну и отредактировал куда выводится результат в первом случае C:\temp\1.txt, во втором случае в C:\temp\2.txt

Sergey666
12-04-2019, 11:18
Второй вариант не работает:

Get-WmiObject : Не удается проверить аргумент для параметра "ComputerName". Аргумент пустой или имеет значение NULL. Ук
ажите непустой аргумент, не имеющий значение NULL, после чего повторите выполнение команды.
строка:3 знак:32
+ $OSInfo = Get-WmiObject -comp $PC_name Win32_OperatingSystem
+ ~~~~~~~~
+ CategoryInfo : InvalidData: (:) [Get-WmiObject], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.PowerShell.Commands.GetWmiObjectCommand

Вот ваш отредактированный »
Это уже намного ближе к идеалу, вот только как бы ещё "---------------------------" убрать

Busla
12-04-2019, 11:32
Molchune, второй вариант неоправданно усложнён - что мешает сразу проинициализировать hashTable нужными значениями без временных переменных и Add-Member?

Molchune
12-04-2019, 14:09
Molchune, второй вариант неоправданно усложнён - что мешает сразу проинициализировать hashTable нужными значениями без временных переменных и Add-Member? »
Как по мне более наглядней просто.
Get-WmiObject : Не удается проверить аргумент для параметра "ComputerName". Аргумент пустой или имеет значение NULL. »
Да ошибся при переносе. отредактировал в оригинальном посте.
Это уже намного ближе к идеалу, вот только как бы ещё "---------------------------" убрать »
Ну тогда только расписывать отдельно по каждому возможному диску. (Внес правки тоже)

Vadikan
15-04-2019, 13:38
См. также http://www.outsidethebox.ms/15841/




© OSzone.net 2001-2012