需要帮助根据用户输入的数据确定数字结构

时间:2019-03-22 01:20:13

标签: powershell scripting

我正在尝试为较大的脚本创建一个函数,以根据用户输入的站点编号确定站点IP地址的第三个八位字节。我实际上已经提出了该函数,但是希望有人可以帮助我提出更简单,更优雅的东西,而不是我提出的大量嵌套if语句。 规则如下:

  • 对于编号为0001-0255的网站,第三个八位字节是网站编号的最后3位数字,减去实数之前的所有零(例如,网站0007 = 10.10.7.xxx)
  • 对于编号为0256-0399和0500-1999(1202除外)的网站,第三个八位字节是网站编号的后两位,减去实数前的任何零(例如,网站0315 = 10.22.15.xxx)
  • 对于编号为401-499的站点,第三个八位字节是站点编号+100的最后两位数字(例如0401 = 10.20.101.xxx)
  • 网站1202是上述规则的例外,其中第三个八位位组是最后3位数字(.202)
  • 对于站点5000及更高版本(5000-9999),将删除第一位数字,然后遵循上述规则。 (例如8248 = 10.12.48.xxx)

这是我想出的。它不是很优雅,但似乎可以工作。请注意,前三行将在脚本中的另一个函数中,但此处用于测试目的。

$global:site = Read-Host 'What is the 4 digit site number?' #must include leading zeros
[int]$global:sitecheck=$site #need for comparasion operators
[string]$global:sitestring=$site

if ($sitecheck -le 255)
    {
    if ($sitestring.substring(0,3) -eq '000') #(i.e. 0001 - 0009)
        {
        $global:thirdoct = $sitestring.substring(3,1) #(i.e. 1-9)
        }
        elseif ($sitestring.substring(0,2) -eq '00') #(i.e. 0010 - 0099) 
            {
            $global:thirdoct = $sitestring.substring(2,2) #(i.e. 10 - 99)
            }
            elseif ($sitestring.substring(0,1) -eq '0') #(i.e. 0100 - 0255)
            {
            $global:thirdoct = $sitestring.substring(1,3) #(i.e. 100 - 255)
            }
}           
elseif ($sitecheck -ge 256 -and $sitecheck -le 399 ) 
    {
    if ($sitestring.substring(2,1) -eq '0') 
        {
        $global:thirdoct = $sitestring.substring(3,1)
        }
        else
        {
        $global:thirdoct = $sitestring.substring(2,2)
        }
}
elseif ($sitecheck -ge 401 -and $sitecheck -le 499) 
    {
    $global:thirdoct = 100+$sitestring.substring(2,2)
    }
elseif ($sitecheck -ge 501 -and $sitecheck -le 799) 
    {
    if ($sitestring.substring(2,1) -eq '0')
        {
        $global:thirdoct = $sitestring.substring(3,1)
        }
        else
        {
        $global:thirdoct = $sitestring.substring(2,2)
        }
    }
elseif ($sitecheck -eq 1202)
    {
    $global:thirdoct = $sitestring.substring(1,3)
    }
elseif ($sitecheck -ge 5000 -and $sitecheck -le 9999) 
    {
    $site5000 = [int]$sitestring.substring(1,3)
    if ($site5000 -le 255)
       {
       if ($sitestring.substring(1,2) -eq '00')
           {
           $global:thirdoct = $sitestring.substring(3,1)
           }
                elseif ($sitestring.substring(1,1) -eq '0')
                {
                $global:thirdoct = $sitestring.substring(2,2)
                }
                    else 
                    {
                    $global:thirdoct = $sitestring.substring(1,3)
                    }
    }
    elseif (($site5000 -ge 256 -and $site5000 -le 399) -or ($site5000 -ge 501 -and $site5000 -le 999))
        {
        $global:thirdoct = $sitestring.substring(2,2)
        }
    elseif ($site5000 -ge 401 -and $site5000 -le 499)
        {
        $global:thirdoct = 100+$sitestring.substring(2,2)
        }
    }

谢谢

0 个答案:

没有答案