天天看点

一个可以检测网络内主机类型的脚本

 最近一直在写一个自动检测网络内主机类型的脚本。基本功能可以实现判断主机操作系统类型,如果是域内的主机可以获取主机的硬件参数和性能参数,并判断是否存在网络设备。对一个运维人员来说往往需要尽快熟悉一个陌生的网络。所以这个脚本就很方便了,如果有更好的建议欢迎指正感谢!

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&gt;</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&gt;</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&gt;</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:\&gt; .\test.ps1 10.7.2 #只需输入网络的前三位

PS C:\&gt; .\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

继续阅读