Powershell管理系列(三十六)PowerShell操做之統計域內計算機硬件資產

-----提供AD\Exchange\Lync\Sharepoint\CRM\SC\O365等微軟產品實施及外包,QQ:185426445.電話18666943750ios

客戶端需設置防火牆,[注意要先設置管理模版防火牆設置,不然將會覆蓋默認組策略的高級防火牆安全設置]shell

一、容許遠程管理,設置以下,啓用windows防火牆:容許入站管理程序c#

參考連接:http://908174.blog.51cto.com/898174/1175525windows

clip_p_w_picpath002

clip_p_w_picpath004

二、 容許遠程桌面數組

clip_p_w_picpath006

clip_p_w_picpath008

開啓遠程桌面。域組策略,「計算機配置」—>「策略」—>」管理模板「—>」Windows組件」—>」遠程桌面服務「—>「遠程桌面會話主機」—>」鏈接「,容許用戶經過使用遠程桌面服務進行遠程鏈接,狀態改成「已啓用」。安全

wKiom1g8K-jAv7SZAAF0eQ2ALhA142.png-wh_50

三、容許ping,打開組策略,高級安全防火牆設置,入站規則app

clip_p_w_picpath010

四、選擇ICMPv4和ICMPv6ide

clip_p_w_picpath012

五、點擊下一步完成測試

clip_p_w_picpath014

六、容許Powershell遠程管理ui

具體設置參考連接:

http://yuntcloud.blog.51cto.com/1173839/1790701

腳本以下:

#統計ip、MAC地址、計算機名、登陸用戶、計算機配置、主機序列號、硬盤序列號、計算機型號、windows及SP的版本、C盤可用空間
#防火牆開啓windows遠程管理、windows防火牆容許入站遠程管理
#編寫:周平 QQ:185426445 聯繫方式:18666943750 歡迎技術交流和提出修改意見
Import-Module activedirectory                                                   
#導入其中的AD 模塊
$computeraccount=Get-ADComputer -Filter * -Properties * |?{($_.OperatingSystem -ne $null) -and ($_.enabled) -and ($_.IPv4Address -ne $null) }|select -ExpandProperty name         
#獲取當前AD 計算機中的全部機器NETBIOS名稱,排除禁用的,無操做系統類型、沒有IP的
$allcomputername=@()                                                            
#定義全部計算機的初始空值
foreach ($currentcomputename in $computeraccount)                               
#根據計算機對象進行輪詢
      { 
        if (Test-NetConnection $currentcomputename|select -ExpandProperty PingSucceeded) `
        #測試計算機是否能夠ping通,若是能夠ping通,則繼續執行
        {
        $currentcomputename+"正測試IP連通性..."   
        $currentname= Get-ADComputer -Identity $currentcomputename|select -ExpandProperty name         
        #獲取機器的NETBIOS名稱       
        $currentuser=(Get-WmiObject Win32_Process -Filter 'Name="explorer.exe"' -ComputerName $currentcomputename).getOwner() | Select -ExpandProperty User
        #獲取機器的當前登陸用戶 
        $currentoperatingsystem= Get-ADComputer -Identity $currentcomputename -Properties * |select -ExpandProperty OperatingSystem          
        #獲取機器的操做系統版本  
        $currentoperatingsystemsp= Get-ADComputer -Identity $currentcomputename -Properties * |select -ExpandProperty OperatingSystemServicePack          
        #獲取機器的操做系統SP版本                                   
        $currentclass= Get-WmiObject -class Win32_BIOS -computername $currentcomputename -namespace "root\cimv2" |select -ExpandProperty SerialNumber        
        #經過獲取WMI中的bios 類獲取到機器相應的序列號,存放在BIOS的SN
        $currentIP=Get-WmiObject -class Win32_NetworkAdapterConfiguration -computername $currentcomputename -Filter IPEnabled=true |select -ExpandProperty IPAddress -First 1 |?{$_ -notlike "*:*" -and $_ -notlike "169*"}   
        #經過獲取WMI中的IPV4地址      
        $currentMAC= Get-WmiObject -class Win32_NetworkAdapterConfiguration -computername $currentcomputename -Filter IPEnabled=true -Property * |?{$_.IPAddress -match $currentIP} |select -ExpandProperty macaddress -First 1 
        #經過獲取WMI中的MAC地址 
        $currentdiskSN=  Get-WmiObject -Class Win32_DiskDrive -computername $currentcomputename |select -First 1 -ExpandProperty Model        
        #經過獲取WMI中的硬盤BIOS序列號
        $currentpcmodel=  Get-WmiObject -Class Win32_ComputerSystem -computername $currentcomputename -Property * |select -ExpandProperty Model        
        #經過獲取WMI中的計算機類型       
        $currentmemory=  (Get-WmiObject -Class Win32_ComputerSystem -computername $currentcomputename -Property * |select -ExpandProperty TotalPhysicalMemory)/1gb -as [int]       
        #經過獲取WMI中的計算機內存   
        $currentharddisk=  (Get-WmiObject -Class Win32_DiskDrive -computername $currentcomputename|select -First 1 -ExpandProperty size)/1gb  -as [int]      
        #經過獲取WMI中的硬盤大小   
        $currentdiskcfreesize=  ((Get-WMIObject Win32_LogicalDisk -ComputerName $currentcomputename | ? { $_.deviceid -match "c" }).freespace)/1GB -as [int]      
        #經過獲取WMI中的C盤可用空間大小                       
        $computerproperty=New-Object  psobject                                                                                                               
        #定義一個新PS 對象
        $computerproperty|  Add-Member -MemberType NoteProperty -Name "計算機名" -Value  $currentname                                                        
        #爲新的對象定義計算機名稱屬性
        $computerproperty|  Add-Member -MemberType NoteProperty -Name "登陸用戶名" -Value  $currentuser                                                        
        #爲新的對象定義計算機當前登陸用戶名屬性
        $computerproperty|  Add-Member -MemberType NoteProperty -Name "主機序列號" -Value $currentclass                                                          
        #爲計算機對象定義序列號屬性   
        $computerproperty|  Add-Member -MemberType NoteProperty -Name "IP地址" -Value $currentip                                                          
        #爲計算機對象定義IP地址屬性  
        $computerproperty|  Add-Member -MemberType NoteProperty -Name "MAC地址" -Value $currentMAC                                                          
        #爲計算機對象定義MAC地址屬性 
        $computerproperty|  Add-Member -MemberType NoteProperty -Name "硬盤序列號" -Value $currentdisksn                                                          
        #爲計算機對象定義硬盤序列號屬性  
        $computerproperty|  Add-Member -MemberType NoteProperty -Name "操做系統版本" -Value $currentoperatingsystem                                                          
        #爲計算機對象定義操做系統版本   
        $computerproperty|  Add-Member -MemberType NoteProperty -Name "操做系統SP版本" -Value $currentoperatingsystemsp                                                          
        #爲計算機對象定義操做系統SP版本   
        $computerproperty|  Add-Member -MemberType NoteProperty -Name "計算機類型" -Value $currentpcmodel                                                          
        #爲計算機對象定義計算機類型 
        $computerproperty|  Add-Member -MemberType NoteProperty -Name "計算機內存大小(GB)" -Value $currentmemory                                                         
        #爲計算機對象定義計算機內存屬性                                                               
        $computerproperty|  Add-Member -MemberType NoteProperty -Name "計算機硬盤大小(GB)" -Value $currentharddisk                                                         
        #爲計算機對象定義計算機硬盤屬性
        $computerproperty|  Add-Member -MemberType NoteProperty -Name "C盤可用空間大小(GB)" -Value $currentdiskcfreesize                                                         
        #爲計算機對象定義計算機C盤可用空間屬性                                                                       
        $allcomputername=$allcomputername+$computerproperty                                                                                                  
        #根據對象的輪詢將當前對象的屬性加入到哈希數組中             
        }      
      }  
        if(!(Test-Path C:\統計計算機資產 -pathType container))
        {
        New-Item c:\統計計算機資產 -type directory
        }
        else {"C:\統計計算機資產文件夾已存在,不須要在建立"}
        #C盤下建立文件夾統計計算機資產,用於統一存放天天的生成的CSV文件            
        $tmplogfile="c:"+"\統計計算機資產\"+$(get-date -Format "yyyy-MM-dd")+".csv"                                                                                         
        #定義輸出文件的路徑和文件格式
        $allcomputername|Sort-Object IP地址 -Descending | Export-Csv -Encoding default -NoTypeInformation -Path $tmplogfile                                                                  
        #將數據導出爲csv 文件,咱們直接經過CSV 文件來獲取但願拿到的信息        
        $UserName = "test@yuntcloud.com"      #定義發送帳戶名稱
        $Password = ConvertTo-SecureString "123456" -AsPlainText –Force
        $cred = New-Object System.Management.Automation.PSCredential($UserName,$Password) 
        Send-MailMessage -From "test@yuntcloud.com" -To "zhouping@yuntcloud.com" -Subject "計算機硬件信息彙總" -Credential $cred -SmtpServer "mail.yuntcloud.com" -Attachments $tmplogfile -Encoding ([System.Text.Encoding]::UTF8)

思路之一:

$a=""|select "計算機類型","計算機名"
$a.計算機類型+="a"
$a.計算機名+="b"
$a

輸出結果爲:

wKioL1gqbEaRp9nRAACRAlw6A_8050.png-wh_50

修改後的powershell以下:

#統計ip、MAC地址、計算機名、登陸用戶、計算機配置、主機序列號、硬盤序列號、計算機型號、windows及SP的版本、C盤可用空間
#防火牆開啓windows遠程管理、windows防火牆容許入站遠程管理
#編寫:周平 QQ:185426445 聯繫方式:18666943750 歡迎技術交流和提出修改意見
Import-Module activedirectory                                                   
#導入其中的AD 模塊
$computeraccount=Get-ADComputer -Filter * -Properties * |?{($_.OperatingSystem -ne $null) -and ($_.enabled) -and ($_.IPv4Address -ne $null) }|select -ExpandProperty name         
#獲取當前AD 計算機中的全部機器NETBIOS名稱,排除禁用的,無操做系統類型、沒有IP的
$allcomputername=@()                                                            
#定義全部計算機的初始空值
foreach ($currentcomputename in $computeraccount)                               
#根據計算機對象進行輪詢
      { 
        if (Test-NetConnection $currentcomputename|select -ExpandProperty PingSucceeded) `
        #測試計算機是否能夠ping通,若是能夠ping通,則繼續執行
        {
        $currentcomputename+"正測試IP連通性..."   
        $currentname= Get-ADComputer -Identity $currentcomputename|select -ExpandProperty name         
        #獲取機器的NETBIOS名稱       
        $currentuser=(Get-WmiObject Win32_Process -Filter 'Name="explorer.exe"' -ComputerName $currentcomputename).getOwner() | Select -ExpandProperty User
        #獲取機器的當前登陸用戶 
        $currentoperatingsystem= Get-ADComputer -Identity $currentcomputename -Properties * |select -ExpandProperty OperatingSystem          
        #獲取機器的操做系統版本  
        $currentoperatingsystemsp= Get-ADComputer -Identity $currentcomputename -Properties * |select -ExpandProperty OperatingSystemServicePack          
        #獲取機器的操做系統SP版本                                   
        $currentclass= Get-WmiObject -class Win32_BIOS -computername $currentcomputename -namespace "root\cimv2" |select -ExpandProperty SerialNumber        
        #經過獲取WMI中的bios 類獲取到機器相應的序列號,存放在BIOS的SN
        $currentIP= Get-WmiObject -class Win32_NetworkAdapterConfiguration -computername $currentcomputename -Filter IPEnabled=true |select -ExpandProperty IPAddress -First 1 |?{$_ -notlike "*:*" -and $_ -notlike "169*"}   
        #經過獲取WMI中的IPV4地址
        $currentMAC= Get-WmiObject -class Win32_NetworkAdapterConfiguration -computername $currentcomputename -Filter IPEnabled=true -Property * |?{$_.IPAddress -match $currentIP} |select -ExpandProperty macaddress -First 1 
        #經過獲取WMI中的MAC地址       
        $currentdiskSN=  Get-WmiObject -Class Win32_DiskDrive -computername $currentcomputename |select -First 1 -ExpandProperty Model        
        #經過獲取WMI中的硬盤BIOS序列號
        $currentpcmodel=  Get-WmiObject -Class Win32_ComputerSystem -computername $currentcomputename -Property * |select -ExpandProperty Model        
        #經過獲取WMI中的計算機類型       
        $currentmemory=  (Get-WmiObject -Class Win32_ComputerSystem -computername $currentcomputename -Property * |select -ExpandProperty TotalPhysicalMemory)/1gb -as [int]       
        #經過獲取WMI中的計算機內存   
        $currentharddisk=  (Get-WmiObject -Class Win32_DiskDrive -computername $currentcomputename|select -First 1 -ExpandProperty size)/1gb  -as [int]      
        #經過獲取WMI中的硬盤大小   
        $currentdiskcfreesize=  ((Get-WMIObject Win32_LogicalDisk -ComputerName $currentcomputename | ? { $_.deviceid -match "c" }).freespace)/1GB -as [int]      
        #經過獲取WMI中的C盤可用空間大小                 
        $allcomputername1=""|select "計算機名","登陸用戶名","主機序列號","IP地址","MAC地址","硬盤序列號","操做系統版本","操做系統SP版本","計算機類型","計算機內存大小","計算機硬盤大小","C盤可用空間大小"
        $allcomputername1.計算機名+=$currentname
        $allcomputername1.登陸用戶名+=$currentuser
        $allcomputername1.主機序列號+=$currentclass
        $allcomputername1.IP地址+=$currentip
        $allcomputername1.MAC地址+=$currentmac
        $allcomputername1.硬盤序列號+=$currentdisksn
        $allcomputername1.操做系統版本+=$currentoperatingsystem
        $allcomputername1.操做系統SP版本+=$currentoperatingsystemsp
        $allcomputername1.計算機類型+=$currentpcmodel
        $allcomputername1.計算機內存大小+=$currentmemory
        $allcomputername1.計算機硬盤大小+=$currentharddisk
        $allcomputername1.C盤可用空間大小+=$currentdiskcfreesize
        $allcomputername+=$allcomputername1                                       
        }      
      }  
        if(!(Test-Path C:\統計計算機資產 -pathType container))
        {
        New-Item c:\統計計算機資產 -type directory
        }
        else {"C:\統計計算機資產文件夾已存在,不須要在建立"}
        #C盤下建立文件夾統計計算機資產,用於統一存放天天的生成的CSV文件             
        $tmplogfile="c:"+"\統計計算機資產\"+$(get-date -Format "yyyy-MM-dd")+".csv"                                                                                         
        #定義輸出文件的路徑和文件格式
        $allcomputername|Sort-Object IP地址 -Descending | Export-Csv -Encoding default -NoTypeInformation -Path $tmplogfile                                                                  
        #將數據導出爲csv 文件,咱們直接經過CSV 文件來獲取但願拿到的信息        
        $UserName = "test@yuntcloud.com"      #定義發送帳戶名稱
        $Password = ConvertTo-SecureString "123456" -AsPlainText –Force
        $cred = New-Object System.Management.Automation.PSCredential($UserName,$Password) 
        Send-MailMessage -From "test@yuntcloud.com" -To "zhouping@yuntcloud.com" -Subject "計算機硬件信息彙總" -Credential $cred -SmtpServer "mail.yuntcloud.com" -Attachments $tmplogfile -Encoding ([System.Text.Encoding]::UTF8)

思路之二:

還能夠考慮使用-append參數代替數組遞加

#統計ip、MAC地址、計算機名、登陸用戶、計算機配置、主機序列號、硬盤序列號、計算機型號、windows及SP的版本、C盤可用空間
#防火牆開啓windows遠程管理、windows防火牆容許入站遠程管理
#編寫:周平 QQ:185426445 聯繫方式:18666943750 歡迎技術交流和提出修改意見
Import-Module activedirectory                                                   
#導入其中的AD 模塊
$computeraccount=Get-ADComputer -Filter * -Properties * |?{($_.OperatingSystem -ne $null) -and ($_.enabled) -and ($_.IPv4Address -ne $null) }|select -ExpandProperty name         
#獲取當前AD 計算機中的全部機器NETBIOS名稱,排除禁用的,無操做系統類型、沒有IP的
$allcomputername=@()                                                            
#定義全部計算機的初始空值
        if(!(Test-Path C:\統計計算機資產 -pathType container))
        {
        New-Item c:\統計計算機資產 -type directory
        }
        else {"C:\統計計算機資產文件夾已存在,不須要在建立"}
        #C盤下建立文件夾統計計算機資產,用於統一存放天天的生成的CSV文件            
        $tmplogfile="c:"+"\統計計算機資產\"+$(get-date -Format "yyyy-MM-dd")+".csv"                                                                                         
        #定義輸出文件的路徑和文件格式
foreach ($currentcomputename in $computeraccount)                               
#根據計算機對象進行輪詢
      { 
        if (Test-NetConnection $currentcomputename|select -ExpandProperty PingSucceeded) `
        #測試計算機是否能夠ping通,若是能夠ping通,則繼續執行
        {
        $currentcomputename+"正測試IP連通性..."   
        $currentname= Get-ADComputer -Identity $currentcomputename|select -ExpandProperty name         
        #獲取機器的NETBIOS名稱       
        $currentuser=(Get-WmiObject Win32_Process -Filter 'Name="explorer.exe"' -ComputerName $currentcomputename).getOwner() | Select -ExpandProperty User
        #獲取機器的當前登陸用戶 
        $currentoperatingsystem= Get-ADComputer -Identity $currentcomputename -Properties * |select -ExpandProperty OperatingSystem          
        #獲取機器的操做系統版本  
        $currentoperatingsystemsp= Get-ADComputer -Identity $currentcomputename -Properties * |select -ExpandProperty OperatingSystemServicePack          
        #獲取機器的操做系統SP版本                                   
        $currentclass= Get-WmiObject -class Win32_BIOS -computername $currentcomputename -namespace "root\cimv2" |select -ExpandProperty SerialNumber        
        #經過獲取WMI中的bios 類獲取到機器相應的序列號,存放在BIOS的SN
        $currentIP= Get-WmiObject -class Win32_NetworkAdapterConfiguration -computername $currentcomputename -Filter IPEnabled=true |select -ExpandProperty IPAddress -First 1 |?{$_ -notlike "*:*" -and $_ -notlike "169*"}   
        #經過獲取WMI中的IPV4地址
        $currentMAC= Get-WmiObject -class Win32_NetworkAdapterConfiguration -computername $currentcomputename -Filter IPEnabled=true -Property * |?{$_.IPAddress -match $currentIP} |select -ExpandProperty macaddress -First 1 
        #經過獲取WMI中的MAC地址       
        $currentdiskSN=  Get-WmiObject -Class Win32_DiskDrive -computername $currentcomputename |select -First 1 -ExpandProperty Model        
        #經過獲取WMI中的硬盤BIOS序列號
        $currentpcmodel=  Get-WmiObject -Class Win32_ComputerSystem -computername $currentcomputename -Property * |select -ExpandProperty Model        
        #經過獲取WMI中的計算機類型       
        $currentmemory=  (Get-WmiObject -Class Win32_ComputerSystem -computername $currentcomputename -Property * |select -ExpandProperty TotalPhysicalMemory)/1gb -as [int]       
        #經過獲取WMI中的計算機內存   
        $currentharddisk=  (Get-WmiObject -Class Win32_DiskDrive -computername $currentcomputename|select -First 1 -ExpandProperty size)/1gb  -as [int]      
        #經過獲取WMI中的硬盤大小   
        $currentdiskcfreesize=  ((Get-WMIObject Win32_LogicalDisk -ComputerName $currentcomputename | ? { $_.deviceid -match "c" }).freespace)/1GB -as [int]      
        #經過獲取WMI中的C盤可用空間大小                       
        $computerproperty=New-Object  psobject                                                                                                               
        #定義一個新PS 對象
        $computerproperty|  Add-Member -MemberType NoteProperty -Name "計算機名" -Value  $currentname                                                        
        #爲新的對象定義計算機名稱屬性
        $computerproperty|  Add-Member -MemberType NoteProperty -Name "登陸用戶名" -Value  $currentuser                                                        
        #爲新的對象定義計算機當前登陸用戶名屬性
        $computerproperty|  Add-Member -MemberType NoteProperty -Name "主機序列號" -Value $currentclass                                                          
        #爲計算機對象定義序列號屬性   
        $computerproperty|  Add-Member -MemberType NoteProperty -Name "IP地址" -Value $currentip                                                          
        #爲計算機對象定義IP地址屬性
        $computerproperty|  Add-Member -MemberType NoteProperty -Name "MAC地址" -Value $currentMAC                                                          
        #爲計算機對象定義MAC地址屬性   
        $computerproperty|  Add-Member -MemberType NoteProperty -Name "硬盤序列號" -Value $currentdisksn                                                          
        #爲計算機對象定義硬盤序列號屬性  
        $computerproperty|  Add-Member -MemberType NoteProperty -Name "操做系統版本" -Value $currentoperatingsystem                                                          
        #爲計算機對象定義操做系統版本   
        $computerproperty|  Add-Member -MemberType NoteProperty -Name "操做系統SP版本" -Value $currentoperatingsystemsp                                                          
        #爲計算機對象定義操做系統SP版本   
        $computerproperty|  Add-Member -MemberType NoteProperty -Name "計算機類型" -Value $currentpcmodel                                                          
        #爲計算機對象定義計算機類型 
        $computerproperty|  Add-Member -MemberType NoteProperty -Name "計算機內存大小(GB)" -Value $currentmemory                                                         
        #爲計算機對象定義計算機內存屬性                                                               
        $computerproperty|  Add-Member -MemberType NoteProperty -Name "計算機硬盤大小(GB)" -Value $currentharddisk                                                         
        #爲計算機對象定義計算機硬盤屬性
        $computerproperty|  Add-Member -MemberType NoteProperty -Name "C盤可用空間大小(GB)" -Value $currentdiskcfreesize                                                         
        #爲計算機對象定義計算機C盤可用空間屬性                                                                      

        $computerproperty|Sort-Object IP地址 -Descending | Export-Csv -Encoding default -NoTypeInformation -Path $tmplogfile -append                                                               
        #將數據導出爲csv 文件,咱們直接經過CSV 文件來獲取但願拿到的信息   
             
        }      
      }  
     
        $UserName = "test@yuntcloud.com"      #定義發送帳戶名稱
        $Password = ConvertTo-SecureString "123456" -AsPlainText –Force
        $cred = New-Object System.Management.Automation.PSCredential($UserName,$Password) 
        Send-MailMessage -From "test@yuntcloud.com" -To "zhouping@yuntcloud.com" -Subject "計算機硬件信息彙總" -Credential $cred -SmtpServer "mail.yuntcloud.com" -Attachments $tmplogfile -Encoding ([System.Text.Encoding]::UTF8)

思路之三:以上只會顯示在線的,不在線的計算機則不會顯示,其實咱們能夠同時分別統計在線的和不在線的,命令以下:

#統計ip、MAC地址、計算機名、登陸用戶、計算機配置、主機序列號、硬盤序列號、計算機型號、windows及SP的版本、C盤可用空間
#防火牆開啓windows遠程管理、windows防火牆容許入站遠程管理
#編寫:周平 QQ:185426445 聯繫方式:18666943750 歡迎技術交流和提出修改意見
Import-Module activedirectory                                                   
#導入其中的AD 模塊
$computeraccount=Get-ADComputer -Filter * -Properties * |?{($_.OperatingSystem -ne $null) -and ($_.enabled) -and ($_.IPv4Address -ne $null) }|select -ExpandProperty name         
#獲取當前AD 計算機中的全部機器NETBIOS名稱,排除禁用的,無操做系統類型、沒有IP的
$allcomputername=@()                                                            
#定義全部計算機的初始空值
$allcomputernameoffline=@()                                                            
#定義全部離線計算機的初始空值

function Get-LoggedOnUser {
#Requires -Version 2.0            
[CmdletBinding()]            
 Param             
   (                       
    [Parameter(Mandatory=$true,
               Position=0,                          
               ValueFromPipeline=$true,            
               ValueFromPipelineByPropertyName=$true)]            
    [String[]]$ComputerName
   )#End Param
Begin            
{            
 Write-Host "`n 正查找用戶 . . . "
 $i = 0            
}#Begin          
Process            
{
    $ComputerName | Foreach-object {
    $Computer = $_
    try
        {
            $processinfo = @(Get-WmiObject -class win32_process -ComputerName $Computer -EA "Stop")
                if ($processinfo)
                {    
                    $processinfo | Foreach-Object {$_.GetOwner().User} | 
                    Where-Object {$_ -ne "NETWORK SERVICE" -and $_ -ne "LOCAL SERVICE" -and $_ -ne "SYSTEM"} |
                    Sort-Object -Unique |
                    ForEach-Object { New-Object psobject -Property @{Computer=$Computer;LoggedOn=$_} } | 
                    Select-Object Computer,LoggedOn
                }#If
        }
    catch
        {
            "找不到指定進程在計算機 $computer" | Out-Host
        }
     }#Forech-object(ComputerName)       
            
}#Process
End
{
}#End
}#Get-LoggedOnUser
#查找當前登陸用戶
foreach ($currentcomputename in $computeraccount)                               
#根據計算機對象進行輪詢
      { 
        if (Test-Connection $currentcomputename -Quiet) `
        #測試計算機是否能夠ping通,若是能夠ping通,則繼續執行
        {
        $currentcomputename+"正測試IP連通性..."   
        $currentname= Get-ADComputer -Identity $currentcomputename|select -ExpandProperty name         
        #獲取機器的NETBIOS名稱       
        $currentuser=Get-LoggedOnUser -ComputerName $currentcomputename|select -ExpandProperty LoggedOn -First 1
        #$currentuser=(Get-WmiObject Win32_Process -Filter 'Name="explorer.exe"' -ComputerName $currentcomputename).getOwner() | Select -ExpandProperty User
        #獲取機器的當前登陸用戶 
        $currentoperatingsystem= Get-ADComputer -Identity $currentcomputename -Properties * |select -ExpandProperty OperatingSystem          
        #獲取機器的操做系統版本  
        $currentoperatingsystemsp= Get-ADComputer -Identity $currentcomputename -Properties * |select -ExpandProperty OperatingSystemServicePack          
        #獲取機器的操做系統SP版本                                   
        $currentclass= Get-WmiObject -class Win32_BIOS -computername $currentcomputename -namespace "root\cimv2" |select -ExpandProperty SerialNumber        
        #經過獲取WMI中的bios 類獲取到機器相應的序列號,存放在BIOS的SN
        $currentIP=Get-WmiObject -class Win32_NetworkAdapterConfiguration -computername $currentcomputename -Filter IPEnabled=true |select -ExpandProperty IPAddress -First 1 |?{$_ -notlike "*:*" -and $_ -notlike "169*"}   
        #經過獲取WMI中的IPV4地址      
        $currentMAC= Get-WmiObject -class Win32_NetworkAdapterConfiguration -computername $currentcomputename -Filter IPEnabled=true -Property * |?{$_.IPAddress -match $currentIP} |select -ExpandProperty macaddress -First 1 
        #經過獲取WMI中的MAC地址 
        $currentdiskSN=  Get-WmiObject -Class Win32_DiskDrive -computername $currentcomputename |select -First 1 -ExpandProperty Model        
        #經過獲取WMI中的硬盤BIOS序列號
        $currentpcmodel=  Get-WmiObject -Class Win32_ComputerSystem -computername $currentcomputename -Property * |select -ExpandProperty Model        
        #經過獲取WMI中的計算機類型       
        $currentmemory=  (Get-WmiObject -Class Win32_ComputerSystem -computername $currentcomputename -Property * |select -ExpandProperty TotalPhysicalMemory)/1gb -as [int]       
        #經過獲取WMI中的計算機內存   
        $currentharddisk=  (Get-WmiObject -Class Win32_DiskDrive -computername $currentcomputename|select -First 1 -ExpandProperty size)/1gb  -as [int]      
        #經過獲取WMI中的硬盤大小   
        $currentdiskcfreesize=  ((Get-WMIObject Win32_LogicalDisk -ComputerName $currentcomputename | ? { $_.deviceid -match "c" }).freespace)/1GB -as [int]      
        #經過獲取WMI中的C盤可用空間大小                       
        $computerproperty=New-Object  psobject                                                                                                               
        #定義一個新PS 對象
        $computerproperty|  Add-Member -MemberType NoteProperty -Name "計算機名" -Value  $currentname                                                        
        #爲新的對象定義計算機名稱屬性
        $computerproperty|  Add-Member -MemberType NoteProperty -Name "登陸用戶名" -Value  $currentuser                                                        
        #爲新的對象定義計算機當前登陸用戶名屬性
        $computerproperty|  Add-Member -MemberType NoteProperty -Name "主機序列號" -Value $currentclass                                                          
        #爲計算機對象定義序列號屬性   
        $computerproperty|  Add-Member -MemberType NoteProperty -Name "IP地址" -Value $currentip                                                          
        #爲計算機對象定義IP地址屬性  
        $computerproperty|  Add-Member -MemberType NoteProperty -Name "MAC地址" -Value $currentMAC                                                          
        #爲計算機對象定義MAC地址屬性 
        $computerproperty|  Add-Member -MemberType NoteProperty -Name "硬盤序列號" -Value $currentdisksn                                                          
        #爲計算機對象定義硬盤序列號屬性  
        $computerproperty|  Add-Member -MemberType NoteProperty -Name "操做系統版本" -Value $currentoperatingsystem                                                          
        #爲計算機對象定義操做系統版本   
        $computerproperty|  Add-Member -MemberType NoteProperty -Name "操做系統SP版本" -Value $currentoperatingsystemsp                                                          
        #爲計算機對象定義操做系統SP版本   
        $computerproperty|  Add-Member -MemberType NoteProperty -Name "計算機類型" -Value $currentpcmodel                                                          
        #爲計算機對象定義計算機類型 
        $computerproperty|  Add-Member -MemberType NoteProperty -Name "計算機內存大小(GB)" -Value $currentmemory                                                         
        #爲計算機對象定義計算機內存屬性                                                               
        $computerproperty|  Add-Member -MemberType NoteProperty -Name "計算機硬盤大小(GB)" -Value $currentharddisk                                                         
        #爲計算機對象定義計算機硬盤屬性
        $computerproperty|  Add-Member -MemberType NoteProperty -Name "C盤可用空間大小(GB)" -Value $currentdiskcfreesize                                                         
        #爲計算機對象定義計算機C盤可用空間屬性                                                                       
        $allcomputername=$allcomputername+$computerproperty                                                                                                  
        #根據對象的輪詢將當前對象的屬性加入到哈希數組中             
        } 
        else `
        {
        $currentnameoffline= Get-ADComputer -Identity $currentcomputename|select -ExpandProperty name         
        #獲取機器的NETBIOS名稱       
        $currentuseroffline=Get-LoggedOnUser -ComputerName $currentcomputename|select -ExpandProperty LoggedOn -First 1
        #$currentuser=(Get-WmiObject Win32_Process -Filter 'Name="explorer.exe"' -ComputerName $currentcomputename).getOwner() | Select -ExpandProperty User
        #獲取機器的當前登陸用戶 
        $currentoperatingsystemoffline= Get-ADComputer -Identity $currentcomputename -Properties * |select -ExpandProperty OperatingSystem          
        #獲取機器的操做系統版本  
        $computerpropertyoffline=New-Object  psobject                                                                                                               
        #定義一個新PS 對象
        $computerpropertyoffline|  Add-Member -MemberType NoteProperty -Name "計算機名" -Value  $currentnameoffline                                                        
        #爲新的對象定義計算機名稱屬性
        $computerpropertyoffline|  Add-Member -MemberType NoteProperty -Name "登陸用戶名" -Value  $currentuseroffline                                                        
        #爲新的對象定義計算機當前登陸用戶名屬性
        $computerpropertyoffline|  Add-Member -MemberType NoteProperty -Name "操做系統版本" -Value $currentoperatingsystemoffline                                                          
        #爲計算機對象定義操做系統版本 
        $allcomputernameoffline=$allcomputernameoffline+$computerpropertyoffline                                                                                                  
        #根據對象的輪詢將當前對象的屬性加入到哈希數組中     
        }     
      }  
        if(!(Test-Path C:\統計計算機資產 -pathType container))
        {
        New-Item c:\統計計算機資產 -type directory
        }
        else {"C:\統計計算機資產文件夾已存在,不須要在建立"}
        #C盤下建立文件夾統計計算機資產,用於統一存放天天的生成的CSV文件            
        $tmplogfile="c:"+"\統計計算機資產\"+$(get-date -Format "yyyy-MM-dd")+"-online"+".csv"                                                                                         
        #定義輸出文件的路徑和文件格式
        $allcomputername|Sort-Object IP地址 -Descending | Export-Csv -Encoding default -NoTypeInformation -Path $tmplogfile                                                                  
        #將數據導出爲csv 文件,咱們直接經過CSV 文件來獲取但願拿到的信息
        $tmplogfileoffline="c:"+"\統計計算機資產\"+$(get-date -Format "yyyy-MM-dd")+"-offline"+".csv"                                                                                         
        #定義輸出文件的路徑和文件格式
        $allcomputernameoffline|Sort-Object 計算機名 -Descending | Export-Csv -Encoding default -NoTypeInformation -Path $tmplogfileoffline                                                                  
        #將數據導出爲csv 文件,咱們直接經過CSV 文件來獲取但願拿到的信息        
                
        $UserName =       #定義發送帳戶名稱
        $Password = ConvertTo-SecureString "123456" -AsPlainText –Force
        $cred = New-Object System.Management.Automation.PSCredential($UserName,$Password) 
        Send-MailMessage -From  -To  -Subject "計算機硬件信息彙總" -Credential $cred -SmtpServer "mail.yuntcloud.com" -Attachments $tmplogfile,$tmplogfileoffline -Encoding ([System.Text.Encoding]::UTF8)

思路之四:以上雖然咱們能夠同時分別統計在線的和不在線的,可是咱們最但願的仍是無論在線的仍是不在線的都能所有顯示出來,命令以下:

#統計ip、MAC地址、計算機名、登陸用戶、計算機配置、主機序列號、硬盤序列號、計算機型號、windows及SP的版本、C盤可用空間
#防火牆開啓windows遠程管理、windows防火牆容許入站遠程管理
#編寫:周平 QQ:185426445 聯繫方式:18666943750 歡迎技術交流和提出修改意見
Import-Module activedirectory                                                   
#導入其中的AD 模塊
$computeraccount=Get-ADComputer -Filter * -Properties * |?{($_.OperatingSystem -ne $null) -and ($_.enabled) -and ($_.IPv4Address -ne $null) }|select -ExpandProperty name         
#獲取當前AD 計算機中的全部機器NETBIOS名稱,排除禁用的,無操做系統類型、沒有IP的
$allcomputername=@()                                                            
#定義全部計算機的初始空值
foreach ($currentcomputename in $computeraccount)                               
#根據計算機對象進行輪詢
      { 
        $allcomputername1=""|select "計算機名","登陸用戶名","主機序列號","IP地址","MAC地址","硬盤序列號","操做系統版本","操做系統SP版本","計算機類型","計算機內存大小","計算機硬盤大小","C盤可用空間大小","計算機是否在線"     
        if (Test-Connection $currentcomputename -Quiet) `
        #測試計算機是否能夠ping通,若是能夠ping通,則繼續執行
        #2012R2後續版本採用更高效的命令 if (Test-NetConnection $currentcomputename|select -ExpandProperty PingSucceeded) `
        {
        $currentcomputename+"正測試IP連通性..."   
        $currentname= Get-ADComputer -Identity $currentcomputename|select -ExpandProperty name         
        #獲取機器的NETBIOS名稱       
        $currentuser=(Get-WmiObject Win32_Process -Filter 'Name="explorer.exe"' -ComputerName $currentcomputename).getOwner() | Select -ExpandProperty User
        #獲取機器的當前登陸用戶 
        $currentoperatingsystem= Get-ADComputer -Identity $currentcomputename -Properties * |select -ExpandProperty OperatingSystem          
        #獲取機器的操做系統版本  
        $currentoperatingsystemsp= Get-ADComputer -Identity $currentcomputename -Properties * |select -ExpandProperty OperatingSystemServicePack          
        #獲取機器的操做系統SP版本                                   
        $currentclass= Get-WmiObject -class Win32_BIOS -computername $currentcomputename -namespace "root\cimv2" |select -ExpandProperty SerialNumber        
        #經過獲取WMI中的bios 類獲取到機器相應的序列號,存放在BIOS的SN
        $currentIP= Get-WmiObject -class Win32_NetworkAdapterConfiguration -computername $currentcomputename -Filter IPEnabled=true |select -ExpandProperty IPAddress -First 1 |?{$_ -notlike "*:*" -and $_ -notlike "169*"}   
        #經過獲取WMI中的IPV4地址
        $currentMAC= Get-WmiObject -class Win32_NetworkAdapterConfiguration -computername $currentcomputename -Filter IPEnabled=true -Property * |?{$_.IPAddress -match $currentIP} |select -ExpandProperty macaddress -First 1 
        #經過獲取WMI中的MAC地址       
        $currentdiskSN=  Get-WmiObject -Class Win32_DiskDrive -computername $currentcomputename |select -First 1 -ExpandProperty Model        
        #經過獲取WMI中的硬盤BIOS序列號
        $currentpcmodel=  Get-WmiObject -Class Win32_ComputerSystem -computername $currentcomputename -Property * |select -ExpandProperty Model        
        #經過獲取WMI中的計算機類型       
        $currentmemory=  (Get-WmiObject -Class Win32_ComputerSystem -computername $currentcomputename -Property * |select -ExpandProperty TotalPhysicalMemory)/1gb -as [int]       
        #經過獲取WMI中的計算機內存   
        $currentharddisk=  (Get-WmiObject -Class Win32_DiskDrive -computername $currentcomputename|select -First 1 -ExpandProperty size)/1gb  -as [int]      
        #經過獲取WMI中的硬盤大小   
        $currentdiskcfreesize=  ((Get-WMIObject Win32_LogicalDisk -ComputerName $currentcomputename | ? { $_.deviceid -match "c" }).freespace)/1GB -as [int]      
        #經過獲取WMI中的C盤可用空間大小                                
        $allcomputername1.計算機名=$currentname
        $allcomputername1.登陸用戶名=$currentuser
        $allcomputername1.主機序列號=$currentclass
        $allcomputername1.IP地址=$currentip
        $allcomputername1.MAC地址=$currentmac
        $allcomputername1.硬盤序列號=$currentdisksn
        $allcomputername1.操做系統版本=$currentoperatingsystem
        $allcomputername1.操做系統SP版本=$currentoperatingsystemsp
        $allcomputername1.計算機類型=$currentpcmodel
        $allcomputername1.計算機內存大小=$currentmemory
        $allcomputername1.計算機硬盤大小=$currentharddisk
        $allcomputername1.C盤可用空間大小=$currentdiskcfreesize
        $allcomputername1.計算機是否在線="Online"                                              
        }
        else `
        {
        $currentname= Get-ADComputer -Identity $currentcomputename|select -ExpandProperty name         
        #獲取機器的NETBIOS名稱  
        $currentoperatingsystem= Get-ADComputer -Identity $currentcomputename -Properties * |select -ExpandProperty OperatingSystem          
        #獲取機器的操做系統版本  
        $currentoperatingsystemsp= Get-ADComputer -Identity $currentcomputename -Properties * |select -ExpandProperty OperatingSystemServicePack          
        #獲取機器的操做系統SP版本  
        $allcomputername1.計算機名=$currentname
        $allcomputername1.操做系統版本=$currentoperatingsystem
        $allcomputername1.操做系統SP版本=$currentoperatingsystemsp
        $allcomputername1.計算機是否在線="Offline"      
        }
        $allcomputername+=$allcomputername1      
      }  
        if(!(Test-Path C:\統計計算機資產 -pathType container))
        {
        New-Item c:\統計計算機資產 -type directory
        }
        else {"C:\統計計算機資產文件夾已存在,不須要在建立"}
        #C盤下建立文件夾統計計算機資產,用於統一存放天天的生成的CSV文件             
        $tmplogfile="c:"+"\統計計算機資產\"+$(get-date -Format "yyyy-MM-dd")+".csv"                                                                                         
        #定義輸出文件的路徑和文件格式
        $allcomputername|Sort-Object IP地址 -Descending | Export-Csv -Encoding default -NoTypeInformation -Path $tmplogfile                                                                  
        #將數據導出爲csv 文件,咱們直接經過CSV 文件來獲取但願拿到的信息        
        $UserName = "test@yuntcloud.com"      #定義發送帳戶名稱
        $Password = ConvertTo-SecureString "123456" -AsPlainText –Force
        $cred = New-Object System.Management.Automation.PSCredential($UserName,$Password) 
        Send-MailMessage -From "test@yuntcloud.com" -To "zhouping@yuntcloud.com" -Subject "計算機硬件信息彙總" -Credential $cred -SmtpServer "mail.yuntcloud.com" -Attachments $tmplogfile -Encoding ([System.Text.Encoding]::UTF8)
相關文章
相關標籤/搜索