gpt4 book ai didi

每个数学问题的 Powershell。总和是累积的,而不是针对轮询的每个服务器

转载 作者:行者123 更新时间:2023-12-03 10:01:43 26 4
gpt4 key购买 nike

尝试编写每日“检查”DHCP 使用情况的脚本。使用 netsh 从 DHCP 服务器中提取信息,查看正在使用和可用的 IP 地址,删除字母和定界字符,所以我只剩下地址的原始数量。然后将它们相加以获得总地址池大小并以 % in use 结束。几天来我一直在研究这个,终于得到了我喜欢的东西,但我的数学不对。一些远程站点有多个范围/子网,当尝试将这些数字添加到每台服务器总数中时,它只是累积添加地址。我认为我的问题是 $u 和 $f 中的最后一个“foreach”,但我不确定如何修复它并得到我想要的。如果我删除最后一个 foreach,它对单个子网站点工作正常,但不能在任何一台服务器上处理更多。我希望这是有道理的。

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"

最佳答案

我会通过在您的正则表达式中使用捕获组并使用切换条件处理正则表达式的能力来显着简化这一过程。

哦,我会使用字典来确保每个服务器都被单独跟踪,同时允许您在捕获完成后访问数据。如果您保存了数据,这也将使您能够进行一些历史跟踪和比较……但这超出了此范围;)

例如

    $addressesInUse = @{};
$addressesFree = @{};

foreach ($server in $serverList) {
$mibinfo = netsh dhcp server \\$server show mibinfo; #| where-object {$_-match "No. of Addresses in use = "} |
foreach ($info in $mibinfo) {
switch -regex ($info) {
"No. of Addresses in use = (?<count>\d+)" {
$val = $Matches["count"];
if ($addressesInUse.ContainsKey($server)) {
$addressesInUse.Add($server,$val);
} else {
$scopeCount.$server += $val;
}
break;
}
"No. of free Addresses = (?<count>\d+)" {
$val = [int]::Parse($Matches["count"]);
if ($addressesFree.ContainsKey($server)) {
$addressesFree.Add($server,$val);
} else {
$addressesFree.$server += $val;
}
break
}
}
}
}

foreach ($key in $addressesFree.keys) {
$total = $addressesInUse.$key + $addressesFree.$key;
$percent = [Math]::Round($addressesInUse.$server / $total*100,2)
Write-Host ("DHCP availablility for server {0}" -f $key);
Write-Host ("No. of Addresses in use = {0}" -f $addressesInUse.$key);
Write-Host ("No. of free Addresses = {0}" -f $addressesFree.$key);
Write-Host ("Total Addresses: {0}" -f $total);
Write-Host ("Percent in use: {0}%" - $percent);
}

关于每个数学问题的 Powershell。总和是累积的,而不是针对轮询的每个服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13848276/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com