ネットワーク上のホストの種類を検出するPowerShellスクリプト
2022-02-06 16:54:55
最近、ネットワーク上のホストの種類を自動的に検出するスクリプトを書いています。基本的な機能は、ホストのオペレーティングシステムの種類を決定し、それがドメイン内のホストである場合は、ホストのハードウェアパラメータとパフォーマンスパラメータを取得し、ネットワークデバイスがあるかどうかを判断することです。運用と保守のスタッフは、しばしばできるだけ早く不慣れなネットワークに精通している必要があります。より良い提案がある場合は、このスクリプトは、感謝を修正するために歓迎されているので、非常に便利です
コピーコード
コードは以下の通りです。
############################################
#Author:Lixiaosong
#Email:[email protected]
#For:detect/24 mask the system type of hosts in the network and get windows host parameters
#Version:1.0
##############################################
Param(
[Parameter(Mandatory=$true)]$Network
)
$Ip=for($i= 1; $i-ile255; $i+= 1){"$Network.$i"}
foreach($Ipaddressin$IP){
#Detect the relevant port state
$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"){
#ServerInfo
$HostSN=(GWMI-ComputerName"$Ipaddress"win32_bios).SerialNUmber
$HostFirm=(GWMI-ComputerName"$Ipaddress"win32_bios).Manufacturer
$HostModel=(GWMI-ComputerName"$Ipaddress"Win32_ComputerSystem).Model
#Host information
$HostName=(GWMI-ComputerName"$Ipaddress"Win32_ComputerSystem).DNSHostName
$DomainName=(GWMI-ComputerName"$Ipaddress"Win32_ComputerSystem).Domain
#Server hardware resource information
$Freemem=(GWMI-ComputerName"$Ipaddress"win32_OperatingSystem).FreePhysicalMemory#FreePhysicalMemory
$Totalmem=(GWMI-ComputerName"$Ipaddress"win32_OperatingSystem).TotalVisibleMemorySize#TotalPhysicalMemory
$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-$Freememem)/$Totalmem)*100)
$Disks= GWMI-ComputerName"$IPaddress"win32_logicaldisk|? {$_.drivetype -eq3}
#Get the Windows host parameters in the domain
Write-host"
=================================================================================================================
Time:$(get-date) WINDOWS Server:$HostName.$DomainName IP:$($IPaddress.Padleft(2)) Brand:$($HostFirm.Padleft(2)) Model:$($HostModel.Padleft(2)) Serial Number: $($HostSN.Padleft(2))
CPU usage:$($Havecpu.Padleft(8)) Memory usage:$($Permem.Padleft(13))
Disk Read/sec:$($DiskRead.Padleft(8)) Disk Write/sec:$($DiskWrite.Padleft(13))
NetworkSent/sec:$($NetworkSent.Padleft(8)) NetworkReceive/sec:$($NetworkReceive.Padleft(13))
Disk Symbol Disk Total Space Free Space Used Space Used Percentage"-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
}
}
# Determining linux hosts
if($port22-like"$true"){
write-host"
================================================================================================================
Server:$IPaddress Open Port:"22" Probably one that is "linux"host"-ForegroundColorYellow
}
# Determine network devices
if($port23-like"$true"){
Write-host"
================================================================================================================
Server:$Ipaddress Open Port:"23" Probably a "network"device"-ForegroundColorCyan
}
#host does not exist
if($Pingtest-like"$False"){
Write-host"
================================================================================================================
Server: $Ipaddress This host does not exist"-ForegroundColorRed
}
}
使用例です。
1 スクリプトを c:♪ に保存します。
2 powershellを実行してPS C:\> を実行します。\test.ps1 10.7.2 # ネットワークの最初の3桁を入力するだけです。
コピーコード
コードは以下の通りです。
PS C:\> . \test.ps1 10.7.2
関連
-
PowerShellスクリプトでパスワードを保存する方法
-
powershellでSQL SERVERの全バージョンを弄る方法
-
PowerShell チュートリアル curl (Invoke-WebRequest) の使用方法について
-
Win Server 2008 R2のためのPowerShellマネジメント
-
統計関数のネスト深度のPowerShell実装
-
サーバーの接続状態を監視するためのPowershellの実装
-
PowerShellでregularとValidateSetを使用してパラメータを検証する
-
PowerShellでファイル名の一括変更
-
ファイルリソースを含むPowershellスクリプトの例
-
Powershellで隠しファイルを表示する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Android携帯のwifiプロキシを自動設定するPowerShellスクリプト
-
PowerShell音声電卓実装コード
-
特定のWebページに関する情報を取得するPowershellコード
-
What-ifのためのPowershellエラー処理
-
PowerShell 3.0 Hyper-V 3.0 の管理
-
ADユーザーのパスワード属性を一括で変更するPowerShellコード
-
PowerShellでプログラム的にIEのキャッシュを空にする
-
コンピュータのシリアル番号を取得するためのPowershellスクリプト
-
PowerShellでWAVオーディオファイルを再生する
-
PowerShellでWindowsの機能オプションを表示する方法