欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

PowerShell脚本实现检测网络内主机类型

程序员文章站 2022-03-31 09:16:38
最近一直在写一个自动检测网络内主机类型的脚本。基本功能可以实现判断主机操作系统类型,如果是域内的主机可以获取主机的硬件参数和性能参数,并判断是否存在网络设备。对一个运维人员...

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

复制代码 代码如下:

############################################
#author:lixiaosong
#email:lixiaosong8706@gmail.com
#for:检测/24掩码网络内主机系统类型并获取windows主机参数
#version:1.0
##############################################
param(
[parameter(mandatory=$true)]$network
)
$ip=for($i= 1; $i-ile255; $i+= 1){"$network.$i"}
foreach($ipaddressin$ip){
#检测相关端口状态
$port3389=3389 | %{ echo ((new-objectnet.sockets.tcpclient).connect("$ipaddress",$_)) "$true"} 2>$null
$port22=22 | %{ echo ((new-objectnet.sockets.tcpclient).connect("$ipaddress",$_)) "$true"} 2>$null
$port23=23 | %{ echo ((new-objectnet.sockets.tcpclient).connect("$ipaddress",$_)) "$true"} 2>$null
$pingtest=test-connection-computername$ipaddress-quiet
if($port3389-like"$true"){
#服务器信息
$hostsn=(gwmi-computername"$ipaddress"win32_bios).serialnumber
$hostfirm=(gwmi-computername"$ipaddress"win32_bios).manufacturer
$hostmodel=(gwmi-computername"$ipaddress"win32_computersystem).model
#主机信息
$hostname=(gwmi-computername"$ipaddress"win32_computersystem).dnshostname
$domainname=(gwmi-computername"$ipaddress"win32_computersystem).domain
#服务器硬件资源信息
$freemem=(gwmi-computername"$ipaddress"win32_operatingsystem).freephysicalmemory#空余物理内存
$totalmem=(gwmi-computername"$ipaddress"win32_operatingsystem).totalvisiblememorysize#总物理内存
$cpu=((get-counter-computername"$ipaddress"-counter"\processor(_total)\% processor time").countersamples|where{$_.instancename -eq"_total"}).cookedvalue
$diskread=" {0:0.0} kb"-f($(((get-counter-computername"$ipaddress"-counter"\logicaldisk(_total)\disk read bytes/sec").countersamples|where{$_.instancename -eq"_total"}).cookedvalue) / 1kb)
$diskwrite="{0:0.0} kb"-f($(((get-counter-computername"$ipaddress"-counter"\logicaldisk(_total)\disk write bytes/sec").countersamples|where{$_.instancename -eq"_total"}).cookedvalue) /1kb)
$networksent=" {0:0.0} kb"-f($((get-counter-computername"$ipaddress"-counter"\network interface(*)\bytes sent/sec").countersamples|%{$_.cookedvalue}|sort|select-last1) / 1kb)
$networkreceive=" {0:0.0} kb"-f($((get-counter-computername"$ipaddress"-counter"\network interface(*)\bytes received/sec").countersamples|%{$_.cookedvalue}|sort|select-last1) / 1kb)
$havecpu= "{0:0.0} %"-f$cpu
$permem="{0:0.0} %"-f((($totalmem-$freemem)/$totalmem)*100)
$disks= gwmi-computername"$ipaddress"win32_logicaldisk|?{$_.drivetype -eq3}
#获取域内windows主机参数
write-host"
=================================================================================================================
时间:$(get-date) windows服务器:$hostname.$domainname ip:$($ipaddress.padleft(2)) 品牌:$($hostfirm.padleft(2)) 型号:$($hostmodel.padleft(2)) 序列号:$($hostsn.padleft(2))
cpu使用率:$($havecpu.padleft(8)) 内存使用率:$($permem.padleft(13))
磁盘读/秒:$($diskread.padleft(8)) 磁盘写/秒:$($diskwrite.padleft(13))
网络发送/秒:$($networksent.padleft(8)) 网络接收/秒:$($networkreceive.padleft(13))
盘符   盘总空间  空闲空间  使用空间  使用百分比"-foregroundcolorgreen
foreach($diskin$disks){
$size= "{0:0.0} gb"-f($disk.size / 1gb )
$freespace= "{0:0.0} gb"-f($disk.freespace / 1gb)
$used= ([int64]$disk.size - [int64]$disk.freespace)
$spaceused= "{0:0.0} gb"-f($used/ 1gb)
$percent="{0:0.0} %"-f($used* 100 / $disk.size)
$n=3
write-host"  "$disk.deviceid.padright($n)-no-foregroundcolorgreen
$n=10
write-host$size.padleft($n)-no-foregroundcolorgreen
write-host$freespace.padleft($n)-no-foregroundcolorgreen
write-host$spaceused.padleft($n)-no-foregroundcolorgreen
write-host$percent.padleft($n)-foregroundcolorgreen
}
}
#判断linux主机
if($port22-like"$true"){
write-host"
================================================================================================================
服务器:$ipaddress 开放端口:"22" 可能是一台是"linux"主机"-foregroundcoloryellow
}
#判断网络设备
if($port23-like"$true"){
write-host"
================================================================================================================
服务器:$ipaddress 开放端口:"23" 可能是一台"网络"设备"-foregroundcolorcyan
}
#主机不存在
if($pingtest-like"$false"){
write-host"
================================================================================================================
服务器:$ipaddress 此主机不存在"-foregroundcolorred
}
}

使用方法举例:

1 将脚本保存至c:\
2 运行powershell 执行ps c:\> .\test.ps1 10.7.2 #只需输入网络的前三位

复制代码 代码如下:

ps c:\> .\test.ps1 10.7.2

PowerShell脚本实现检测网络内主机类型