最近一直在写一个自动检测网络内主机类型的脚本。基本功能可以实现判断主机操作系统类型,如果是域内的主机可以获取主机的硬件参数和性能参数,并判断是否存在网络设备。对一个运维人员来说往往需要尽快熟悉一个陌生的网络。所以这个脚本就很方便了,如果有更好的建议欢迎指正感谢!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
<code>############################################</code>
<code>#Author:Lixiaosong</code>
<code>#Email:[email protected]</code>
<code>#For:检测/24掩码网络内主机系统类型并获取windows主机参数</code>
<code>#Version:1.0</code>
<code>##############################################</code>
<code>Param</code><code>(</code>
<code> </code><code>[</code><code>Parameter</code><code>(</code><code>Mandatory</code><code>=</code><code>$true</code><code>)]</code><code>$Network</code>
<code>)</code>
<code>$Ip</code><code>=</code><code>for</code> <code>(</code><code>$i</code> <code>= 1; </code><code>$i</code> <code>-ile</code> <code>255; </code><code>$i</code> <code>+= 1){</code><code>"$Network.$i"</code><code>}</code>
<code>foreach</code> <code>(</code><code>$Ipaddress</code> <code>in</code> <code>$IP</code><code>){</code>
<code> </code><code>#检测相关端口状态</code>
<code> </code><code>$Port3389</code><code>=3389 | %{ echo ((</code><code>new-object</code> <code>Net.Sockets.TcpClient).Connect(</code><code>"$Ipaddress"</code><code>,</code><code>$_</code><code>)) </code><code>"$true"</code><code>} 2></code><code>$null</code>
<code> </code><code>$Port22</code><code>=22 | %{ echo ((</code><code>new-object</code> <code>Net.Sockets.TcpClient).Connect(</code><code>"$Ipaddress"</code><code>,</code><code>$_</code><code>)) </code><code>"$true"</code><code>} 2></code><code>$null</code>
<code> </code><code>$Port23</code><code>=23 | %{ echo ((</code><code>new-object</code> <code>Net.Sockets.TcpClient).Connect(</code><code>"$Ipaddress"</code><code>,</code><code>$_</code><code>)) </code><code>"$true"</code><code>} 2></code><code>$null</code>
<code> </code><code>$Pingtest</code><code>=</code><code>Test-connection</code> <code>-ComputerName</code> <code>$IPaddress</code> <code>-quiet</code>
<code> </code><code>if</code> <code>(</code><code>$Port3389</code> <code>-like</code> <code>"$true"</code><code>){</code>
<code> </code><code>#服务器信息</code>
<code> </code><code>$HostSN</code><code>=(GWMI</code> <code>-ComputerName</code> <code>"$Ipaddress"</code> <code>win32_bios).SerialNUmber</code>
<code> </code><code>$HostFirm</code><code>=(GWMI</code> <code>-ComputerName</code> <code>"$Ipaddress"</code> <code>win32_bios).Manufacturer</code>
<code> </code><code>$HostModel</code><code>=(GWMI</code> <code>-ComputerName</code> <code>"$Ipaddress"</code> <code>Win32_ComputerSystem).Model</code>
<code> </code><code>#主机信息</code>
<code> </code><code>$HostName</code><code>=(GWMI</code> <code>-ComputerName</code> <code>"$Ipaddress"</code> <code>Win32_ComputerSystem).DNSHostName</code>
<code> </code><code>$DomainName</code><code>=(GWMI</code> <code>-ComputerName</code> <code>"$Ipaddress"</code> <code>Win32_ComputerSystem).Domain</code>
<code> </code><code>#服务器硬件资源信息</code>
<code> </code><code>$Freemem</code><code>=(GWMI</code> <code>-ComputerName</code> <code>"$Ipaddress"</code> <code>win32_OperatingSystem).FreePhysicalMemory</code><code>#空余物理内存</code>
<code> </code><code>$Totalmem</code><code>=(GWMI</code> <code>-ComputerName</code> <code>"$Ipaddress"</code> <code>win32_OperatingSystem).TotalVisibleMemorySize</code><code>#总物理内存</code>
<code> </code><code>$cpu</code><code>=((</code><code>get-counter</code> <code>-ComputerName</code> <code>"$IPaddress"</code> <code>-counter</code> <code>"\processor(_total)\% processor time"</code><code>).CounterSamples</code><code>|where</code> <code>{</code><code>$_</code><code>.InstanceName </code><code>-eq</code> <code>"_total"</code> <code>}).CookedValue</code>
<code> </code><code>$DiskRead</code><code>=</code><code>" {0:0.0} KB"</code> <code>-f</code> <code>($(((</code><code>get-counter</code> <code>-ComputerName</code> <code>"$Ipaddress"</code> <code>-counter</code> <code>"\LogicalDisk(_total)\Disk Read Bytes/sec"</code><code>).CounterSamples</code><code>|where</code> <code>{</code><code>$_</code><code>.InstanceName </code><code>-eq</code> <code>"_total"</code> <code>}).CookedValue) / 1KB)</code>
<code> </code><code>$DiskWrite</code><code>=</code><code>"{0:0.0} KB"</code> <code>-f</code> <code>($(((</code><code>get-counter</code> <code>-ComputerName</code> <code>"$Ipaddress"</code> <code>-counter</code> <code>"\LogicalDisk(_total)\Disk Write Bytes/sec"</code><code>).CounterSamples</code><code>|where</code> <code>{</code><code>$_</code><code>.InstanceName </code><code>-eq</code> <code>"_total"</code> <code>}).CookedValue) /1KB)</code>
<code> </code><code>$NetworkSent</code><code>=</code><code>" {0:0.0} KB"</code> <code>-f</code> <code>($((</code><code>Get-Counter</code> <code>-ComputerName</code> <code>"$Ipaddress"</code> <code>-Counter</code> <code>"\Network Interface(*)\Bytes Sent/sec"</code><code>).CounterSamples|%{</code><code>$_</code><code>.CookedValue}</code><code>|sort</code><code>|select</code> <code>-last</code> <code>1) / 1KB)</code>
<code> </code><code>$NetworkReceive</code><code>=</code><code>" {0:0.0} KB"</code> <code>-f</code> <code>($((</code><code>Get-Counter</code> <code>-ComputerName</code> <code>"$IPaddress"</code> <code>-Counter</code> <code>"\Network Interface(*)\Bytes Received/sec"</code><code>).CounterSamples|%{</code><code>$_</code><code>.CookedValue}</code><code>|sort</code><code>|select</code> <code>-last</code> <code>1) / 1KB)</code>
<code> </code><code>$Havecpu</code> <code>= </code><code>"{0:0.0} %"</code> <code>-f</code> <code>$cpu</code>
<code> </code><code>$Permem</code><code>=</code><code>"{0:0.0} %"</code> <code>-f</code> <code>(((</code><code>$Totalmem</code><code>-</code><code>$Freemem</code><code>)/</code><code>$Totalmem</code><code>)*100)</code>
<code> </code><code>$Disks</code> <code>= GWMI</code> <code>-ComputerName</code> <code>"$IPaddress"</code> <code>win32_logicaldisk|?{</code><code>$_</code><code>.drivetype </code><code>-eq</code> <code>3}</code>
<code> </code><code>#获取域内Windows主机参数</code>
<code> </code><code>Write-host</code> <code>"</code>
<code> </code><code>=================================================================================================================</code>
<code> </code><code>时间:$(get-date) WINDOWS服务器:$HostName.$DomainName IP:$($IPaddress.Padleft(2)) 品牌:$($HostFirm.Padleft(2)) 型号:$($HostModel.Padleft(2)) 序列号:$($HostSN.Padleft(2))</code>
<code> </code><code>CPU使用率:$($Havecpu.Padleft(8)) 内存使用率:$($Permem.Padleft(13))</code>
<code> </code><code>磁盘读/秒:$($DiskRead.Padleft(8)) 磁盘写/秒:$($DiskWrite.Padleft(13))</code>
<code> </code><code>网络发送/秒:$($NetworkSent.Padleft(8)) 网络接收/秒:$($NetworkReceive.Padleft(13))</code>
<code> </code><code>盘符 盘总空间 空闲空间 使用空间 使用百分比"</code> <code>-ForegroundColor</code> <code>Green</code>
<code> </code><code>foreach</code> <code>(</code><code>$Disk</code> <code>in</code> <code>$Disks</code><code>){</code>
<code> </code><code>$Size</code> <code>= </code><code>"{0:0.0} GB"</code> <code>-f</code> <code>(</code><code>$Disk</code><code>.Size / 1GB )</code>
<code> </code><code>$FreeSpace</code> <code>= </code><code>"{0:0.0} GB"</code> <code>-f</code> <code>(</code><code>$Disk</code><code>.FreeSpace / 1GB)</code>
<code> </code><code>$Used</code> <code>= (</code><code>[int64]</code><code>$Disk</code><code>.size - </code><code>[int64]</code><code>$Disk</code><code>.freespace)</code>
<code> </code><code>$SpaceUsed</code> <code>= </code><code>"{0:0.0} GB"</code> <code>-f</code> <code>(</code><code>$Used</code> <code>/ 1GB)</code>
<code> </code><code>$Percent</code> <code>=</code><code>"{0:0.0} %"</code> <code>-f</code> <code>(</code><code>$Used</code> <code>* 100 / </code><code>$Disk</code><code>.Size) </code>
<code> </code><code>$n</code><code>=3</code>
<code> </code><code>Write-Host</code> <code>" "</code><code>$Disk</code><code>.deviceid.PadRight(</code><code>$n</code><code>)</code> <code>-no</code> <code>-ForegroundColor</code> <code>Green</code>
<code> </code><code>$n</code><code>=10</code>
<code> </code><code>Write-Host</code> <code>$Size</code><code>.Padleft(</code><code>$n</code><code>)</code> <code>-no</code> <code>-ForegroundColor</code> <code>Green</code>
<code> </code><code>Write-Host</code> <code>$FreeSpace</code><code>.Padleft(</code><code>$n</code><code>)</code> <code>-no</code> <code>-ForegroundColor</code> <code>Green</code>
<code> </code><code>Write-Host</code> <code>$SpaceUsed</code><code>.Padleft(</code><code>$n</code><code>)</code> <code>-no</code> <code>-ForegroundColor</code> <code>Green</code>
<code> </code><code>Write-Host</code> <code>$Percent</code><code>.Padleft(</code><code>$n</code><code>)</code> <code>-ForegroundColor</code> <code>Green</code>
<code> </code><code>}</code>
<code> </code><code>#判断linux主机</code>
<code> </code><code>if</code> <code>(</code><code>$port22</code> <code>-like</code> <code>"$true"</code><code>){</code>
<code> </code><code>write-host</code> <code>"</code>
<code> </code><code>================================================================================================================</code>
<code> </code><code>服务器:$IPaddress 开放端口:"</code><code>22</code><code>" 可能是一台是"</code><code>linux</code><code>"主机"</code> <code>-ForegroundColor</code> <code>Yellow</code>
<code> </code><code>#判断网络设备</code>
<code> </code><code>if</code> <code>(</code><code>$port23</code> <code>-like</code> <code>"$true"</code><code>){</code>
<code> </code><code>服务器:$Ipaddress 开放端口:"</code><code>23</code><code>" 可能是一台"</code><code>网络</code><code>"设备"</code> <code>-ForegroundColor</code> <code>Cyan</code>
<code> </code><code>#主机不存在</code>
<code> </code><code>if</code> <code>(</code><code>$Pingtest</code> <code>-like</code> <code>"$False"</code><code>){</code>
<code> </code><code>服务器:$Ipaddress 此主机不存在"</code> <code>-ForegroundColor</code> <code>Red</code>
<code> </code><code>}</code>
使用方法举例:
1 将脚本保存至c:\
2 运行powershell 执行PS C:\> .\test.ps1 10.7.2 #只需输入网络的前三位
PS C:\> .\test.ps1 10.7.2
<a href="http://s3.51cto.com/wyfs02/M00/11/89/wKioL1LT-mSCxYLkAAUAJZYM-LY607.jpg" target="_blank"></a>
本文转自handsome7038 51CTO博客,原文链接:http://blog.51cto.com/lixiaosong/1351351