Сценарий Powershell для сравнения хэша файла из потока и опубликованного

#powershell #shell #hash #get-filehash

#powershell #оболочка #хэш #получаем-filehash

Вопрос:

Доброе утро, ребята,

Я новичок в написании сценариев powershell. И я не могу понять, что я делаю не так.

Я попытался написать скрипт .ps1 для сравнения значения хэша потока. Я воспользовался документацией Microsoft для получения справки и модифицировал ее в исполняемый скрипт, чтобы мне не нужно было писать его снова и снова.

 $wc = [System.Net.WebClient]::new()
$pkgurl = Read-Host "Please enter Package Url: "
$publishedHash = Read-Host "Enter Published Hash: "
$FileHash = Get-FileHash -InputStream ($wc.OpenRead($pkgurl))
if ($FileHash.Hash -eq $publishedHash) {
    Write-Host "File Hash is equal to published Hash."
}
else {
    Write-Host "File Hash NOT equal to published Hash."
}
  

Когда я запускаю скрипт и ввожу URL пакета и опубликованный хэш, программа внезапно резко завершает работу.

Пожалуйста, у кого-нибудь есть идея?

Комментарии:

1. Пожалуйста, не добавляйте неподходящие теги к своим вопросам. Я просто удалил bash , о чем ваш вопрос powershell .

Ответ №1:

Сценарий завершается, поскольку ему больше нечего делать.

Вы можете добавить read-host в конце, чтобы дождаться ввода пользователем перед его закрытием. (это ничего не сделает с вводом, это просто заставляет его оставаться открытым до тех пор, пока не будет выполнен ввод.)

В качестве альтернативы, если вы хотите использовать его несколько раз без его закрытия, вы можете создать цикл:

 $KeepOpen = $true

While($KeepOpen -eq $true){
    $wc = [System.Net.WebClient]::new()
    $pkgurl = Read-Host "Please enter Package Url: "
    $publishedHash = Read-Host "Enter Published Hash: "
    $FileHash = Get-FileHash -InputStream ($wc.OpenRead($pkgurl))
    if ($FileHash.Hash -eq $publishedHash) {
        Write-Host "File Hash is equal to published Hash."
    }
    else {
        Write-Host "File Hash NOT equal to published Hash."
    }
    $user_input = Read-Host "Please enter Y to run again"
    if($user_input -ne "Y"){
        $KeepOpen = $false
    }
}
  

При этом скрипт останется открытым, чтобы вы могли видеть результаты, и если вы хотите, чтобы он запустился снова, вставьте Y и нажмите enter, и вы должны вернуться к тому, с чего начали.