none
скрипт на PS для опроса клиентских ОС RRS feed

  • Вопрос

  • как с помощью PS можно получить инфу с компов:  имя компа, логин юзера, размер диска, объём памяти, IP , разделив их хоть как-то,  например в столбик или в строку с знаком "|" ? чтобы читабильно было.  Знаю, что будут рекомендовать специальные проги для этих дел. интересно именно скриптом.


    • Изменено serg_23 18 февраля 2019 г. 6:54
    18 февраля 2019 г. 5:12

Ответы

  • это потому что у вас более одного диска
    foreach ($hd in $hdd){
       "Hard disk : {0}" -F ($HD.size /1GB)
    }


    The opinion expressed by me is not an official position of Microsoft

    • Помечено в качестве ответа serg_23 19 февраля 2019 г. 11:05
    19 февраля 2019 г. 10:44
    Модератор

Все ответы

  • Таких примеров навалом в сети, вот одни из них, где-то в сети нашел (надеюсь авторы не будут паниковать, по поводу лицензии на никому не нужные скрипты). Это примеры а лучше под себя самому написать целевой скрипт с опросами через сеть:

    function Get-PCINFO
    {
    
    Param ([Parameter(Mandatory=$False, Position=0, HelpMessage="ComputerName")][Object] $PC = $env:COMPUTERNAME)
    
    PROCESS {
    $OS = Get-WmiObject -Class Win32_OperatingSystem -Computername $PC
    $PCProperties = Get-WmiObject -Class Win32_ComputerSystem -ComputerName $PC
    $MemoryProperties = Get-WmiObject -Class Win32_PhysicalMemory -ComputerName $PC
    # Display free memory on PC/Server
    
    "---------PC Parameters----------"
    ""
    "System Name      : {0}" -f $OS.csname
    "Manufacturer     : {0}" -f $PCProperties.Manufacturer
    "Model            : {0}" -f $PCProperties.Model
    "Caption          : {0}" -f $OS.Caption  + $OS.CSDVersion
    "OSArchitecture   : {0}" -f $OS.OSArchitecture
    "Total Memory (GB): {0}" -F ([math]::round(($PCProperties.TotalPhysicalMemory / 1024 / 1024), 2))
    "Banks number     : {0}" -f $MemoryProperties.Length
    "Free Memory (MB) : {0}" -f ([math]::round($OS.FreePhysicalMemory / 1024, 2))
    ""
    $MemoryProperties | select  Manufacturer,PartNumber | ft -HideTableHeaders
    
    "------------------------------------"
    } #End PRocess
    
    }#End Function
    
    Clear-Host
    Get-PCINFO $env:COMPUTERNAME

    Вот еще как пример:

    Function Get-SystemInfo
    <#
    .SYNOPSIS
    Get Complete details of any server Local or remote
    .DESCRIPTION
    This function uses WMI class to connect to remote machine and get all related details
    .PARAMETER COMPUTERNAMES
    Just Pass computer name as Its parameter
    .EXAMPLE 
    Get-SystemInfo
    .EXAMPLE 
    Get-SystemInfo -ComputerName HQSPDBSP01
    .NOTES
    To get help:
    Get-Help Get-SystemInfo
    .LINK
    http://sqlpowershell.wordpress.com
    #>
    
    {
    param(
        [Parameter(Mandatory=$true)] $ComputerName,
        [switch] $IgnorePing
         )
    
    
    $computer = $ComputerName
    
    # Declare main data hash to be populated later
    $data = @{}
    
    $data.' ComputerName'=$computer
    
    # Try an ICMP ping the only way Powershell knows how...
    $ping = Test-Connection -quiet -count 1 $computer
    $Ping = $(if ($ping) { 'Yes' } else { 'No' })
    
    # Do a DNS lookup with a .NET class method. Suppress error messages.
    $ErrorActionPreference = 'SilentlyContinue'
    if ( $ips = [System.Net.Dns]::GetHostAddresses($computer) | foreach { $_.IPAddressToString } ) {
        
        $data.'IP Address(es) from DNS' = ($ips -join ', ')
        
    }
    
    else {
        
        $data.'IP Address from DNS' = 'Could not resolve'
        
    }
    # Make errors visible again
    $ErrorActionPreference = 'Continue'
    
    # We'll assume no ping reply means it's dead. Try this anyway if -IgnorePing is specified
    if ($ping -or $ignorePing) {
        
        $data.'WMI Data Collection Attempt' = 'Yes (ping reply or -IgnorePing)'
        
        # Get various info from the ComputerSystem WMI class
        if ($wmi = Get-WmiObject -Computer $computer -Class Win32_ComputerSystem -ErrorAction SilentlyContinue) {
            
            $data.'Computer Hardware Manufacturer' = $wmi.Manufacturer
            $data.'Computer Hardware Model'        = $wmi.Model
            $data.'Memory Physical in MB'          = ($wmi.TotalPhysicalMemory/1MB).ToString('N')
            $data.'Logged On User'                 = $wmi.Username
            
        }
        
        $wmi = $null
        
        # Get the free/total disk space from local disks (DriveType 3)
        if ($wmi = Get-WmiObject -Computer $computer -Class Win32_LogicalDisk -Filter 'DriveType=3' -ErrorAction SilentlyContinue) {
            
            $wmi | Select 'DeviceID', 'Size', 'FreeSpace' | Foreach {
                
                $data."Local disk $($_.DeviceID)" = ('' + ($_.FreeSpace/1MB).ToString('N') + ' MB free of ' + ($_.Size/1MB).ToString('N') + ' MB total space with ' + ($_.Size/1MB - $_.FreeSpace/1MB).ToString('N') +' MB Used Space')
                
                
            }
            
        }
        
        $wmi = $null
        
        # Get IP addresses from all local network adapters through WMI
        if ($wmi = Get-WmiObject -Computer $computer -Class Win32_NetworkAdapterConfiguration -ErrorAction SilentlyContinue) {
            
            $Ips = @{}
            
            $wmi | Where { $_.IPAddress -match '\S+' } | Foreach { $Ips.$($_.IPAddress -join ', ') = $_.MACAddress }
            
            $counter = 0
            $Ips.GetEnumerator() | Foreach {
                
                $counter++; $data."IP Address $counter" = '' + $_.Name + ' (MAC: ' + $_.Value + ')'
                
            }
            
        }
        
        $wmi = $null
        
        # Get CPU information with WMI
        if ($wmi = Get-WmiObject -Computer $computer -Class Win32_Processor -ErrorAction SilentlyContinue) {
            
            $wmi | Foreach {
                
                $maxClockSpeed     =  $_.MaxClockSpeed
                $numberOfCores     += $_.NumberOfCores
                $description       =  $_.Description
                $numberOfLogProc   += $_.NumberOfLogicalProcessors
                $socketDesignation =  $_.SocketDesignation
                $status            =  $_.Status
                $manufacturer      =  $_.Manufacturer
                $name              =  $_.Name
                
            }
            
            $data.'CPU Clock Speed'        = $maxClockSpeed
            $data.'CPU Cores'              = $numberOfCores
            $data.'CPU Description'        = $description
            $data.'CPU Logical Processors' = $numberOfLogProc
            $data.'CPU Socket'             = $socketDesignation
            $data.'CPU Status'             = $status
            $data.'CPU Manufacturer'       = $manufacturer
            $data.'CPU Name'               = $name -replace '\s+', ' '
            
        }
        
        $wmi = $null
        
        # Get BIOS info from WMI
        if ($wmi = Get-WmiObject -Computer $computer -Class Win32_Bios -ErrorAction SilentlyContinue) {
            
            $data.'BIOS Manufacturer' = $wmi.Manufacturer
            $data.'BIOS Name'         = $wmi.Name
            $data.'BIOS Version'      = $wmi.Version
            
        }
        
        $wmi = $null
        
        # Get operating system info from WMI
        if ($wmi = Get-WmiObject -Computer $computer -Class Win32_OperatingSystem -ErrorAction SilentlyContinue) {
            
            $data.'OS Boot Time'     = $wmi.ConvertToDateTime($wmi.LastBootUpTime)
            $data.'OS System Drive'  = $wmi.SystemDrive
            $data.'OS System Device' = $wmi.SystemDevice
            $data.'OS Language     ' = $wmi.OSLanguage
            $data.'OS Version'       = $wmi.Version
            $data.'OS Windows dir'   = $wmi.WindowsDirectory
            $data.'OS Name'          = $wmi.Caption
            $data.'OS Install Date'  = $wmi.ConvertToDateTime($wmi.InstallDate)
            $data.'OS Service Pack'  = [string]$wmi.ServicePackMajorVersion + '.' + $wmi.ServicePackMinorVersion
            
        }
        
        # Scan for open ports
        $ports = @{ 
                    'File shares/RPC' = '139' ;
                    'File shares'     = '445' ;
                    'RDP'             = '3389';
                    #'Zenworks'        = '1761';
                  }
        
        foreach ($service in $ports.Keys) {
            
            $socket = New-Object Net.Sockets.TcpClient
            
            # Suppress error messages
            $ErrorActionPreference = 'SilentlyContinue'
            
            # Try to connect
            $socket.Connect($computer, $ports.$service)
            
            # Make error messages visible again
            $ErrorActionPreference = 'Continue'
            
            if ($socket.Connected) {
                
                $data."Port $($ports.$service) ($service)" = 'Open'
                $socket.Close()
                
            }
            
            else {
                
                $data."Port $($ports.$service) ($service)" = 'Closed or filtered'
                
            }
            
            $socket = $null
            
        }
        
    }
    
    else {
        
        $data.'WMI Data Collected' = 'No (no ping reply and -IgnorePing not specified)'
        
    }
    
    $wmi = $null
    
    
    if ($wmi = Get-WmiObject -Class Win32_OperatingSystem -computername $Computer -ErrorAction SilentlyContinue| Select-Object Name, TotalVisibleMemorySize, FreePhysicalMemory,TotalVirtualMemorySize,FreeVirtualMemory,FreeSpaceInPagingFiles,NumberofProcesses,NumberOfUsers ) {
            
            $wmi | Foreach {
                
                $TotalRAM     =  $_.TotalVisibleMemorySize/1MB
                $FreeRAM     = $_.FreePhysicalMemory/1MB
                $UsedRAM       =  $_.TotalVisibleMemorySize/1MB - $_.FreePhysicalMemory/1MB
                $TotalRAM = [Math]::Round($TotalRAM, 2)
                $FreeRAM = [Math]::Round($FreeRAM, 2)
                $UsedRAM = [Math]::Round($UsedRAM, 2)
                $RAMPercentFree = ($FreeRAM / $TotalRAM) * 100
                $RAMPercentFree = [Math]::Round($RAMPercentFree, 2)
                $TotalVirtualMemorySize  = [Math]::Round($_.TotalVirtualMemorySize/1MB, 3)
                $FreeVirtualMemory =  [Math]::Round($_.FreeVirtualMemory/1MB, 3)
                $FreeSpaceInPagingFiles            =  [Math]::Round($_.FreeSpaceInPagingFiles/1MB, 3)
                $NumberofProcesses      =  $_.NumberofProcesses
                $NumberOfUsers              =  $_.NumberOfUsers
                
            }
            $data.'Memory - Total RAM GB '  = $TotalRAM
            $data.'Memory - RAM Free GB'    = $FreeRAM
            $data.'Memory - RAM Used GB'    = $UsedRAM
            $data.'Memory - Percentage Free'= $RAMPercentFree
            $data.'Memory - TotalVirtualMemorySize' = $TotalVirtualMemorySize
            $data.'Memory - FreeVirtualMemory' = $FreeVirtualMemory
            $data.'Memory - FreeSpaceInPagingFiles' = $FreeSpaceInPagingFiles
            $data.'NumberofProcesses'= $NumberofProcesses
            $data.'NumberOfUsers'    = $NumberOfUsers -replace '\s+', ' '
            
        }
    
    # Output data
    "#"*80
    "OS Complete Information"
    "Generated $(get-date)"
    "Generated from $(gc env:computername)"
    "#"*80
    
    
    
    $data.GetEnumerator() | Sort-Object 'Name' | Format-Table -AutoSize
    $data.GetEnumerator() | Sort-Object 'Name' | Out-GridView -Title "$computer Information"
    }
    Clear-Host
    Get-SystemInfo -ComputerName $env:computername




    18 февраля 2019 г. 7:51
  • function getAccountUsers ([string]$CompName=$env:computername , [string]$FileName='c:\Accounts.txt') {
    #$null > r:\report.csv
    # Массив пользователей
    #$strusers = @(Get-WmiObject win32_UserAccount -computername $CompName)
    
    # Экспорт в файл csv
    $strusers = @(Get-WmiObject win32_UserAccount -computername $CompName | Select-Object * )
    $strusers | Export-CSV -NoTypeInformation -Encoding UTF32 $FileName 
    # Вывести на экран 
    #$str = Import-Csv -Path $FileName
    $strusers | Format-Table -AutoSize
    }
    
    Clear-host
    
    getAccountUsers -CompName $env:computername #-FileName "c:\Account.csv"

    18 февраля 2019 г. 7:56
  • третий скрипт из полезной информации выводит логины юзеров АД, а не последнего залогиненого на компе. да ни о памяти, проце, диске - ни слова.

    • Изменено serg_23 18 февраля 2019 г. 13:34
    18 февраля 2019 г. 11:19
  • первый скрипт выводит инфу только относительно текущего компа, а не всех. как со всех компов первым скриптом собрать инфу ?


    18 февраля 2019 г. 13:36
  • первый скрипт выводит инфу только относительно текущего компа, а не всех. как со всех компов первым скриптом собрать инфу ?


    get-adcomputer -filter * | foreach {Get-PCINFO -PC $_.Name}


    The opinion expressed by me is not an official position of Microsoft

    • Помечено в качестве ответа serg_23 19 февраля 2019 г. 6:01
    • Снята пометка об ответе serg_23 19 февраля 2019 г. 6:15
    18 февраля 2019 г. 14:57
    Модератор
  • 1. как правильно преобразовать строку

    есть в первом скрипте вывод памяти:

    $MemoryProperties = Get-WmiObject -Class Win32_PhysicalMemory -ComputerName $PC

    ....

    "Memory (GB)      : {0}" -F ([math]::round(($PCProperties.TotalPhysicalMemory / 1024 / 1024), 2))

    хочу тоже самое преобразование сделать для диска, так как выводится много цифр, а надо в GB, как с памятью.

    $HardDisk = Get-WmiObject Win32_DiskDrive | Select-Object size

    .....

    "Hard Disk  : {0}" -F  $HDD.Size 

    плюс, необходимо использовать  | Select-Object size   или как-то надо было через -Computer $PC  ??

    2. не выводится IP, просто пусто

    $IP = Get-WmiObject Win32_NetworkAdapterConfiguration | Select-Object IPAddress

    "IP               : {0}" -f $IP.IPAddress

    что не так ??

    19 февраля 2019 г. 6:12
  • 1. как правильно преобразовать строку

    есть в первом скрипте вывод памяти:

    $MemoryProperties = Get-WmiObject -Class Win32_PhysicalMemory -ComputerName $PC

    ....

    "Memory (GB)      : {0}" -F ([math]::round(($PCProperties.TotalPhysicalMemory / 1024 / 1024), 2))

    хочу тоже самое преобразование сделать для диска, так как выводится много цифр, а надо в GB, как с памятью.

    $HardDisk = Get-WmiObject Win32_DiskDrive | Select-Object size

    .....

    "Hard Disk  : {0}" -F  $HDD.Size 

    плюс, необходимо использовать  | Select-Object size   или как-то надо было через -Computer $PC  ??

    2. не выводится IP, просто пусто

    $IP = Get-WmiObject Win32_NetworkAdapterConfiguration | Select-Object IPAddress

    "IP               : {0}" -f $IP.IPAddress

    что не так ??

    поясните что значит выделенный фрагмент

    1 "Hard Disk  : {0}" -F  ($HDD.Size /1GB)

    2 Get-WmiObject Win32_NetworkAdapterConfiguration возвращает то что вам необходимо??

    пс почему вы в вопросах используете 2 вопросительных знака??

       


    The opinion expressed by me is not an official position of Microsoft

    19 февраля 2019 г. 6:50
    Модератор
  • 1. "Hard Disk  : {0}" -F  ($HDD.Size /1GB)  - выдаёт ошибку, если указать 1024, то тоже неправильно.

    2. Get-WmiObject Win32_NetworkAdapterConfiguration - ничего не возвращает, пусто.

    19 февраля 2019 г. 7:02
  • 1. "Hard Disk  : {0}" -F  ($HDD.Size /1GB)  - выдаёт ошибку, если указать 1024, то тоже неправильно.

    2. Get-WmiObject Win32_NetworkAdapterConfiguration - ничего не возвращает, пусто.

    вы выше переменную назвали $HardDisk поменяйте ее на $HDD

    без параметра -Computername вы будет получать значения с того пк где выполняете этот скрипт


    The opinion expressed by me is not an official position of Microsoft

    • Помечено в качестве ответа serg_23 19 февраля 2019 г. 7:51
    • Снята пометка об ответе serg_23 19 февраля 2019 г. 7:51
    19 февраля 2019 г. 7:08
    Модератор
  • там правильно написал, не работает. для подсчёта памяти используется целая функция....вот и спросил как для диска подсчёт сделать в GB.

    так если использовать конструкцию $HardDisk = Get-WmiObject Win32_DiskDrive | Select-Object size  надо ещё добавлять -Computername $PC  или нет ?

    19 февраля 2019 г. 8:00
  • ######################################################## 
    # Get-HwInfo.ps1 
    # Version 1.0 
    # 
    # Getting basic information about systems hardware 
    # 
    # Vadims Podans (c) 2008 
    # http://vpodans.spaces.live.com/ 
    ########################################################
    function Get-OsData {
        param ($targets = ".")
        Foreach ($target in $targets) {
        $computers = $target
        Get-HwInfo
    
        }
        
    }
    function Get-HwInfo {
        $OS = gwmi  Win32_OperatingSystem -ComputerName $computers | Select Caption, OSArchitecture,
            OtherTypeDescription, ServicePackMajorVersion, CSName, TotalVisibleMemorySize
        $CPU = gwmi  Win32_Processor -ComputerName $computers | Select Architecture, DeviceID, Name
        $RAM = gwmi  Win32_MemoryDevice -ComputerName $computers | Select DeviceID,
            StartingAddress, EndingAddress
        $MB = gwmi  Win32_BaseBoard -ComputerName $computers | Select Manufacturer, Product, Version
        $VGA = gwmi  Win32_VideoController -ComputerName $computers | Select Name, AdapterRam
        $HDD = gwmi  Win32_DiskDrive -ComputerName $computers | select Model, Size
        $Volumes = gwmi  Win32_LogicalDisk -Filter "MediaType = 12" -ComputerName $computers | Select DeviceID,
            Size, FreeSpace
        $CD = gwmi Win32_CDROMDrive | Select Id, Name, MediaType
        $NIC = gwmi Win32_NetworkAdapter -ComputerName $computers | ?{$_.NetConnectionID -ne $null}
        Write-Host "Computer Name: `n`t" $OS.CSName `
        `n"Operating System: `n`t" $OS.Caption " " $OS.OtherTypeDescription $OS.OSArchitecture `
        `n"Service Pack: `n`t" "Service Pack " $OS.ServicePackMajorVersion " installed" `
        `n"Processors:"
        $CPU | ft DeviceID, @{
            Label = "Architecture"; Expression = {
                switch ($_.Architecture) {
                    "0" {"x86"}; "1" {"MIPS"}; "2" {"Alpha"}; "3" {"PowerPC"}; "6" {"Intel Itanium"}; "9" {"x64"}
                }
            }
        }, @{Label = "Model"; Expression = {$_.name}} -AutoSize
        Write-Host "Physical Memory: "
        $RAM | ft DeviceID, @{Label = "Module Size(MB)"; Expression = {
            (($_.endingaddress - $_.startingaddress) / 1KB).tostring("F00")}} -AutoSize
        Write-Host "Total Memory: `n`t" ($OS.TotalVisibleMemorySize / 1KB).tostring("F00") " MB" `
        `n"MotherBoard: " `
        `n"`tVendor: " $MB.Manufacturer `
        `n"`tModel:  " $MB.Product `
        `n"`tVersion: " $MB.Version `
        `n"Videocontroller:" `
        `n"`tModel: " $VGA.Name `
        `n"`tVideo RAM: " ($VGA.AdapterRam/1MB).tostring("F00") " MB`n" `
        `n"HarddDisks:"
        $HDD | ft Model, @{Label="Disk Size(GB)"; Expression = {($_.Size/1GB).tostring("F01")}} -AutoSize
        Write-Host "Disk Partitions:"
        $Volumes | ft DeviceID, @{Label="TotalSize(GB)"; Expression={($_.Size/1GB).ToString("F01")}},
            @{Label="FreeSize(GB)"; Expression={($_.FreeSpace/1GB).tostring("F01")}} -AutoSize
        $CD | ft Id, @{Label = "Media Type"; Expression = {$_.MediaType}},
            @{Label = "Model"; Expression = {$_.Name}} -AutoSize
        Write-Host "Netwok Adapters:"
        $NIC | ft NetConnectionID, @{
            Label="Media Status"; Expression = {
                switch ($_.NetConnectionStatus) {
                    "0" {"Disconnected"}
                    "1" {"Connecting"}
                    "2" {"Connected"}
                    "3" {"Disconnecting"}
                    "4" {"Hardware not present"}
                    "5" {"Hardware disabled"}
                    "6" {"Hardware malfunction"}
                    "7" {"Media disconnected"}
                    "8" {"Authenticating"}
                    "9" {"Authentication succeeded"}
                    "10" {"Authentication failed"}
                    "11" {"Invalid address"}
                    "12" {"Credentials required"}
                }
            }
        }, @{Label="NIC"; Expression={$_.name}}
    }
    
    Clear-Host
    Get-OsData $env:COMPUTERNAME


    19 февраля 2019 г. 8:50
  • Clear-Host
    
    
    function get-sysinfo {
    param(
        [Parameter(Mandatory=$true)] $TargetComputer,
        [switch] $IgnorePing
         )
    
    # Check that the Quest.ActiveRoles.ADManagement snapin is available
    # If not, just print a warning rather than exiting as is usually necessary.
    if (!(Get-PSSnapin Quest.ActiveRoles.ADManagement -registered -ErrorAction SilentlyContinue)) {
        
        'You need the Quest ActiveRoles AD Management Powershell snapin to fully use this script'
        "www.quest.com`n"
        'Please install and register this snapin.'
            
    }
    
    # Add the snapin and don't display an error if it's already added.
    # If it's not registered, the warning above will be printed, but
    # I changed it from exiting, as I normally have it do, to just continuing,
    # because WMI, DNS, etc. might still work.
    Add-PSSnapin Quest.ActiveRoles.ADManagement -ErrorAction SilentlyContinue
    
    $private:computer = $targetComputer
    
    'Processing ' + $private:computer + '...'
    
    # Declare main data hash to be populated later
    $data = @{}
    
    $data.'Computer Name' = $private:computer
    
    # Try an ICMP ping the only way Powershell knows how...
    $private:ping = Test-Connection -quiet -count 1 $private:computer
    $data.Ping = $(if ($private:ping) { 'Yes' } else { 'No' })
    
    # Do a DNS lookup with a .NET class method. Suppress error messages.
    $ErrorActionPreference = 'SilentlyContinue'
    if ( $private:ips = [System.Net.Dns]::GetHostAddresses($private:computer) | foreach { $_.IPAddressToString } ) {
        
        $data.'IP Address(es) from DNS' = ($private:ips -join ', ')
        
    }
    
    else {
        
        $data.'IP Address from DNS' = 'Could not resolve'
        
    }
    # Make errors visible again
    $ErrorActionPreference = 'Continue'
    
    # We'll assume no ping reply means it's dead. Try this anyway if -IgnorePing is specified
    if ($private:ping -or $private:ignorePing) {
        
        $data.'WMI Data Collection Attempt' = 'Yes (ping reply or -IgnorePing)'
        
        # Get various info from the ComputerSystem WMI class
        if ($private:wmi = Get-WmiObject -Computer $private:computer -Class Win32_ComputerSystem -ErrorAction SilentlyContinue) {
            
            $data.'Computer Hardware Manufacturer' = $private:wmi.Manufacturer
            $data.'Computer Hardware Model'        = $private:wmi.Model
            $data.'Physical Memory in MB'          = ($private:wmi.TotalPhysicalMemory/1MB).ToString('N')
            $data.'Logged On User'                 = $private:wmi.Username
            
        }
        
        $private:wmi = $null
        
        # Get the free/total disk space from local disks (DriveType 3)
        if ($private:wmi = Get-WmiObject -Computer $private:computer -Class Win32_LogicalDisk -Filter 'DriveType=3' -ErrorAction SilentlyContinue) {
            
            $private:wmi | Select 'DeviceID', 'Size', 'FreeSpace' | Foreach {
                
                $data."Local disk $($_.DeviceID)" = ('' + ($_.FreeSpace/1MB).ToString('N') + ' MB free of ' + ($_.Size/1MB).ToString('N') + ' MB total space' )
                
            }
            
        }
        
        $private:wmi = $null
        
        # Get IP addresses from all local network adapters through WMI
        if ($private:wmi = Get-WmiObject -Computer $private:computer -Class Win32_NetworkAdapterConfiguration -ErrorAction SilentlyContinue) {
            
            $private:Ips = @{}
            
            $private:wmi | Where { $_.IPAddress -match '\S+' } | Foreach { $private:Ips.$($_.IPAddress -join ', ') = $_.MACAddress }
            
            $private:counter = 0
            $private:Ips.GetEnumerator() | Foreach {
                
                $private:counter++; $data."IP Address $private:counter" = '' + $_.Name + ' (MAC: ' + $_.Value + ')'
                
            }
            
        }
        
        $private:wmi = $null
        
        # Get CPU information with WMI
        if ($private:wmi = Get-WmiObject -Computer $private:computer -Class Win32_Processor -ErrorAction SilentlyContinue) {
            
            $private:wmi | Foreach {
                
                $private:maxClockSpeed     =  $_.MaxClockSpeed
                $private:numberOfCores     += $_.NumberOfCores
                $private:description       =  $_.Description
                $private:numberOfLogProc   += $_.NumberOfLogicalProcessors
                $private:socketDesignation =  $_.SocketDesignation
                $private:status            =  $_.Status
                $private:manufacturer      =  $_.Manufacturer
                $private:name              =  $_.Name
                
            }
            
            $data.'CPU Clock Speed'        = $private:maxClockSpeed
            $data.'CPU Cores'              = $private:numberOfCores
            $data.'CPU Description'        = $private:description
            $data.'CPU Logical Processors' = $private:numberOfLogProc
            $data.'CPU Socket'             = $private:socketDesignation
            $data.'CPU Status'             = $private:status
            $data.'CPU Manufacturer'       = $private:manufacturer
            $data.'CPU Name'               = $private:name -replace '\s+', ' '
            
        }
        
        $private:wmi = $null
        
        # Get BIOS info from WMI
        if ($private:wmi = Get-WmiObject -Computer $private:computer -Class Win32_Bios -ErrorAction SilentlyContinue) {
            
            $data.'BIOS Manufacturer' = $private:wmi.Manufacturer
            $data.'BIOS Name'         = $private:wmi.Name
            $data.'BIOS Version'      = $private:wmi.Version
            
        }
        
        $private:wmi = $null
        
        # Get operating system info from WMI
        if ($private:wmi = Get-WmiObject -Computer $private:computer -Class Win32_OperatingSystem -ErrorAction SilentlyContinue) {
            
            $data.'OS Boot Time'     = $private:wmi.ConvertToDateTime($private:wmi.LastBootUpTime)
            $data.'OS System Drive'  = $private:wmi.SystemDrive
            $data.'OS System Device' = $private:wmi.SystemDevice
            $data.'OS Language     ' = $private:wmi.OSLanguage
            $data.'OS Version'       = $private:wmi.Version
            $data.'OS Windows dir'   = $private:wmi.WindowsDirectory
            $data.'OS Name'          = $private:wmi.Caption
            $data.'OS Install Date'  = $private:wmi.ConvertToDateTime($private:wmi.InstallDate)
            $data.'OS Service Pack'  = [string]$private:wmi.ServicePackMajorVersion + '.' + $private:wmi.ServicePackMinorVersion
            
        }
        
        # Scan for open ports
        $ports = @{ 
                    'File shares/RPC' = '139' ;
                    'File shares'     = '445' ;
                    'RDP'             = '3389';
                    #'Zenworks'        = '1761';
                  }
        
        foreach ($service in $ports.Keys) {
            
            $private:socket = New-Object Net.Sockets.TcpClient
            
            # Suppress error messages
            $ErrorActionPreference = 'SilentlyContinue'
            
            # Try to connect
            $private:socket.Connect($private:computer, $ports.$service)
            
            # Make error messages visible again
            $ErrorActionPreference = 'Continue'
            
            if ($private:socket.Connected) {
                
                $data."Port $($ports.$service) ($service)" = 'Open'
                $private:socket.Close()
                
            }
            
            else {
                
                $data."Port $($ports.$service) ($service)" = 'Closed or filtered'
                
            }
            
            $private:socket = $null
            
        }
        
    }
    
    else {
        
        $data.'WMI Data Collected' = 'No (no ping reply and -IgnorePing not specified)'
        
    }
    
    # Get data from AD using Quest ActiveRoles Get-QADComputer
    $private:computerObject = Get-QADComputer $private:computer -ErrorAction 'SilentlyContinue'
    if ($private:computerObject) {
        
        $data.'AD Operating System'         = $private:computerObject.OSName
        $data.'AD Operating System Version' = $private:computerObject.OSVersion
        $data.'AD Service Pack'             = $private:computerObject.OSServicePack
        $data.'AD Enabled AD Account'       = $( if ($private:computerObject.AccountIsDisabled) { 'No' } else { 'Yes' } )
        $data.'AD Description'              = $private:computerObject.Description
        
    }
    
    else {
        
        $data.'AD Computer Object Info Collected' = 'No'
        
    }
    
    # Output data
    $data.GetEnumerator() | Sort-Object 'Name' | Format-Table -AutoSize
    $data.GetEnumerator() | Sort-Object 'Name' | Out-GridView -Title "$private:computer Information"
    }
    
    get-sysinfo -TargetComputer $env:COMPUTERNAME


    19 февраля 2019 г. 8:53
  • Нет смысла отвечать на твои вопросы, нужно изучить мат. часть для начала.

    Набери в гугле такую строку Попов intext:powershell filetype:pdf

    И изучи основы.

    19 февраля 2019 г. 8:59
  • там правильно написал, не работает. для подсчёта памяти используется целая функция....вот и спросил как для диска подсчёт сделать в GB.

    так если использовать конструкцию $HardDisk = Get-WmiObject Win32_DiskDrive | Select-Object size  надо ещё добавлять -Computername $PC  или нет ?

    Еще раз, без -Computername $PC вы получите результат с локальной машины

    та большая функция округляет значение до двух знаков - можете использовать ее, так как в общем и целом сути дела это не меняет


    The opinion expressed by me is not an official position of Microsoft


    19 февраля 2019 г. 9:06
    Модератор
  • там правильно написал, не работает. для подсчёта памяти используется целая функция....вот и спросил как для диска подсчёт сделать в GB.

    так если использовать конструкцию $HardDisk = Get-WmiObject Win32_DiskDrive | Select-Object size  надо ещё добавлять -Computername $PC  или нет ?

    Еще раз, без -Computername $PC вы получите результат с локальной машины

    та большая функция округляет значение до двух знаков - можете использовать ее, так как в общем и целом сути дела это не меняет


    The opinion expressed by me is not an official position of Microsoft


    а у меня при делении выдаёт ошибку:

    19 февраля 2019 г. 9:57
  • это потому что у вас более одного диска
    foreach ($hd in $hdd){
       "Hard disk : {0}" -F ($HD.size /1GB)
    }


    The opinion expressed by me is not an official position of Microsoft

    • Помечено в качестве ответа serg_23 19 февраля 2019 г. 11:05
    19 февраля 2019 г. 10:44
    Модератор
  • да, отобразилось 2 диска c  размерами GB. НО, они по отдельности.

    IP так и не выводится почему-то

    19 февраля 2019 г. 11:05
  • да, отобразилось 2 диска c  размерами GB. НО, они по отдельности.

    IP так и не выводится почему-то

    ну так если их 2 то они и должны быть по отдельности (по крайней мере это логично

    2 варианта

    # 1 Вывод всех адресов в список
    $(get-WmiObject Win32_NetworkAdapterConfiguration|Where {$_.Ipaddress.length -gt 1} ).IpAddress | Foreach {"IP Addtess : {0}" -F $_}
    # 2 Вывод первого адреса
    "IP Address : {0}" -F (get-WmiObject Win32_NetworkAdapterConfiguration|Where {$_.Ipaddress.length -gt 1} ).IpAddress

    А что до форматирования то все предельно просто

    "Hard Disk  : {0}" -F  [math]::Round(($HDD.Size /1GB),2)


    The opinion expressed by me is not an official position of Microsoft

    19 февраля 2019 г. 16:20
    Модератор