0
# Step 1) install Chocolatey when needed

if (-not (Test-Path -Path "$env:ProgramData\Chocolatey\choco.exe" -PathType Leaf)) 
{
   # from https://chocolatey.org/install

   Set-ExecutionPolicy Bypass -Scope Process -Force;
   [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072;
   iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1')) 
}



# Step 2) define the array of packages you are offering

$Packages = 'googlechrome',
            'firefox',
            'codeblocks',
            'windbg',
            'nasm',
            'explorersuite',
            'pestudio',
            'vscode',
            'sysinternals',
            'python',
            'ccleaner',
            'anaconda3',
            'wireshark',
            'sublimetext3',
            'notepadplusplus',
            'ida-free'

            

# Step 3) define the Show-Menu function


function Show-Menu
 {
    Clear-Host
    Write-Host "**********************************************"
    Write-Host "LIST OF SOFTWARES"

    # write the options using the array of packages

    for ($i = 0; $i -lt $Packages.Count; $i++) 
    {
        # {0,10} means right align with spaces to max 10 characters
        Write-Host ('{0,10}. {1}' -f ($i + 1), $Packages[$i])
    }

    Write-Host " q. Exit the script"
    Write-Host "*************************************************"
    Write-Host
}




# Step 4) enter an endless loop you only exit if the user enters 'q'

while ($true) 
{
    Show-Menu

     $UserInput = Read-Host "Select the softwares number(s) to be installed (space separated) "


    # testing if the user wants to quit and if so, break the loop

    if ($UserInput -eq 'q') 
    { 
        break 
    }

    foreach($input in $UserInput.Split(' '))
    {

        # testing if the user entered a number between 1 and the total number of packages (inclusive)

        if ([int]::TryParse($UserInput,[ref]$null) -and 1..$Packages.Count -contains [int]$UserInput) 
        {
            # here you install the chosen package using the array index number (= user input number minus 1)

             $packageIndex = [int]$UserInput - 1
             Write-Host "Installing $($Packages[$packageIndex])"
             Choco install $Packages[$packageIndex] -y --ignore-checksums

         }

         else 
         {
            $availableOptions = 1..$Packages.Count -join ','
            Write-Host "Error in selection, choose $availableOptions or q" -ForegroundColor Red
         }

            $null = Read-Host "Press Enter to continue"
  
     }

}

上面的脚本运行良好,但我必须实现这样的功能,例如当用户按下任何键时,软件下载进度必须停止,当用户再次按下任何键时,软件下载进度必须恢复。如何在我的脚本中实现这一点。任何人都可以告诉我如何将这个逻辑放在我的脚本中。提前致谢

4

0 回答 0