-----提供AD\Exchange\Lync\Sharepoint\CRM\SC\O365等微軟產品實施及外包,QQ:185426445.電話18666943750ios
客戶端需設置防火牆,[注意要先設置管理模版防火牆設置,不然將會覆蓋默認組策略的高級防火牆安全設置]shell
一、容許遠程管理,設置以下,啓用windows防火牆:容許入站管理程序c#
參考連接:http://908174.blog.51cto.com/898174/1175525windows
二、 容許遠程桌面數組
開啓遠程桌面。域組策略,「計算機配置」—>「策略」—>」管理模板「—>」Windows組件」—>」遠程桌面服務「—>「遠程桌面會話主機」—>」鏈接「,容許用戶經過使用遠程桌面服務進行遠程鏈接,狀態改成「已啓用」。安全
三、容許ping,打開組策略,高級安全防火牆設置,入站規則app
四、選擇ICMPv4和ICMPv6ide
五、點擊下一步完成測試
六、容許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
輸出結果爲:
修改後的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)