DHCP の使用状況を毎日「チェック」するスクリプトを作成しようとしています。netshを使用してDHCPサーバーから情報を取得し、使用中および使用可能なIPアドレスを調べ、文字と区切り文字を削除して、アドレスの生の数だけを残しました。次に、それらを合計してアドレス プールの合計サイズを取得し、% in use で終了します。私は数日間これに夢中になっていて、最終的に気に入ったものを手に入れましたが、私の数学はうまくいきません. 一部のリモート サイトには複数のスコープ/サブネットがあり、それらの数をサーバーごとの合計に追加しようとすると、代わりにアドレスが累積的に追加されます。私の問題は $u と $f の最後の「foreach」だと思いますが、それを修正して必要なものを取得する方法がわかりません。最後の foreach を削除すると、単一のサブネット サイトでは正常に機能しますが、1 つのサーバーでそれ以上処理することはできません。それが理にかなっていることを願っています。
function dhcp {
$servers = "contoso","contoso2","contoso3"
Foreach ($server in $servers)
{
netsh dhcp server \\$server show server
"DHCP Server: $server"
#netsh dhcp server \\$server show mibinfo | select-string -pattern "scope", "subnet", "No. of Addresses in use = ", "No. of free Addresses = "
$u = (netsh dhcp server \\$server show mibinfo |
where-object {$_-match "No. of Addresses in use = "} |
foreach-object{$_.Split(“=")[-1].Trim( ).Trim(".").Trim(" ")} |
foreach-object{($u2+=[int]$_)})
$f = (netsh dhcp server \\$server show mibinfo |
where-object {$_-match "No. of free Addresses = "} |
foreach-object{$_.Split(“=")[-1].Trim().Trim(".").Trim(" ")} |
foreach-object{($f2+=[int]$_)})
$total2 = ([int]$u2+[int]$f2)
$percent = [Math]::Round([int]$u2/[int]$total2*100,2)
"No. of Addresses in use = $u2"
"No. of free Addresses = $f2"
"Total Addresses: $total2"
"Percent in use: $percent%"
" ======"
"=================================================="
}
}
dhcp | out-file "C:\Users\crabbypatty\Desktop\Powershell\dhcplog $(get-date -f MM-dd-HHmm).txt"