#hash #checksum #chocolatey #shim #packager
Вопрос:
# Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass (Before running the script execute the command in terminal for admin rights)
# Step 1) install Chocolatey when needed
#if (-not (Test-Path -Path "$env:ProgramDataChocolateychoco.exe" -PathType Leaf))
#{
# from https://chocolatey.org/install
# Set-ExecutionPolicy Bypass -Scope Process -Force
# [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072
# Invoke-Expression ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
#}
if (-not (Test-Path -Path "$env:ProgramDataChocolateychoco.exe" -PathType Leaf))
{
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',
'google earth',
'notepadplusplus',
'iTunes'
# 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 2 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 "Enter the software number to be installed"
# test if the user wants to quit and if so, break the loop
if ($UserInput -eq 'q') { break }
# test 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
}
else
{
$availableOptions = 1..$Packages.Count -join ','
Write-Host "Error in selection, choose $availableOptions or q" -ForegroundColor Red
}
$null = Read-Host "Press Enter to continue"
}
Скрипт работает правильно, все программное обеспечение устанавливается правильно, но когда я пытаюсь установить некоторые программы,такие как nasm, pestudio, я получаю ошибку контрольной суммы, т. е. значение хэша загруженного файла не совпадает со значением хэша сопровождающего пакета, поэтому я получаю ошибку контрольной суммы. Я узнал, что ошибку контрольной суммы можно игнорировать. Синтаксис для игнорирования контрольной суммы-choco install SoftwareName —игнорировать контрольные суммы
но где я должен поместить это утверждение в свой сценарий, может ли кто-нибудь поместить это утверждение в мой сценарий, который я пытался вставить, но он не отражает. пожалуйста, кто-нибудь может отредактировать мой сценарий. Заранее спасибо.
Ответ №1:
Вы уже ответили на свой собственный вопрос:
Синтаксис для игнорирования контрольной суммы таков
choco install SoftwareName --ignore-checksums
Так что добавляйте --ignore-checksums
, чтобы пока все работало. Лучшим долгосрочным решением было бы либо:
- Поиск пакета на https://chocolatey.org и свяжитесь с сопровождающими пакетов по поводу несоответствующих контрольных сумм, чтобы они могли отправить обновление.
- Поддерживайте свой собственный канал nuget и пакеты для необходимого вам программного обеспечения. Это наиболее рекомендуемый подход в деловой обстановке.
Комментарии:
1. Всякий раз, когда программное обеспечение снижается, т. е. прогресс программного обеспечения снижается примерно с 1 2 … до 100% . Мне нужно остановить программное обеспечение для понижения и снова возобновить с того места, где оно остановлено.Как этого добиться в моем сценарии, пожалуйста, помогите мне.
2. Извините, но я не понимаю, в чем ваше замешательство. Добавьте
--ignore-checksums
в свою команду choco install в предоставленном вами скрипте3. Это хорошая новость! Не забудьте проголосовать за контент, который вы считаете полезным, и принять ответы, которые решили или помогли решить вашу проблему. Если вы решили эту проблему самостоятельно, это также хорошая форма, чтобы ответить на свой собственный вопрос с решением, чтобы помочь другим в будущем.