Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Данные о системе (http://forum.oszone.net/showthread.php?t=340078)

Sergey666 12-04-2019 08:37 2867507

Данные о системе
 
Добрый день!
Сразу оговорюсь это мой первый код на 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 2867533

Вот ваш отредактированный
Ваш вариант

Код:

# Имя компьютера
$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 2867535

Второй вариант не работает:

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

Цитата:

Цитата Molchune
Вот ваш отредактированный »

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

Busla 12-04-2019 11:32 2867540

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

Molchune 12-04-2019 14:09 2867556

Цитата:

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

Как по мне более наглядней просто.
Цитата:

Цитата Sergey666
Get-WmiObject : Не удается проверить аргумент для параметра "ComputerName". Аргумент пустой или имеет значение NULL. »

Да ошибся при переносе. отредактировал в оригинальном посте.
Цитата:

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

Ну тогда только расписывать отдельно по каждому возможному диску. (Внес правки тоже)

Vadikan 15-04-2019 13:38 2867852

См. также https://www.outsidethebox.ms/15841/


Время: 18:55.

Время: 18:55.
© OSzone.net 2001-