Вызываемая функция не выполняет код внутри функции - PullRequest
0 голосов
/ 31 мая 2018

По сути, я пытаюсь создать скрипт, позволяющий моему GPU майнеру выбирать, с какими настройками запускать майнер (чтобы выбрать, какой GPU использовать с майнером), и это код, который я написал для своего скрипта PowerShell.:

$choice = '0'
function Get-Choice()
{
Write-Host 'Here are your choices:'
Write-Host '1. All GPUs'
Write-Host '2. GPU 0'
Write-Host '3. GPU 1'
$choice = Read-Host -Prompt 'Type the number and press enter to select what GPU(s) to mine with'
}

Get-Choice

function Set-Gpu0
{
Write-Host 'GPU 1 Chosen'
Start-Sleep -Seconds 2
miner.exe --server us-east.zec.slushpool.com --port 4444 --user ColinAndress.Colin --pass x --cuda_devices 1 --intensity 64 --eexit 3
Set-Gpu0
}

function Set-Gpu1
{
Write-Host 'GPU 0 Chosen'
Start-Sleep -Seconds 2
miner.exe --server us-east.zec.slushpool.com --port 4444 --user ColinAndress.Colin --pass x --cuda_devices 0 --intensity 64 --eexit 3
Set-Gpu1
}

function Set-All
{
Write-Host 'All GPUs Chosen'
Start-Sleep -Seconds 2
miner.exe --server us-east.zec.slushpool.com --port 4444 --user ColinAndress.Colin --pass x --cuda_devices 0 1 --intensity 64 64 --eexit 3
Set-All 
}

function Is-Invalid
{
Write-Host 'Option is invalid. Pick again'
Get-Choice
}

If(-NOT($choice-eq1-or2-or3)){Is-Invalid}
Elseif($choice-eq1){Set-All}
Elseif($choice-eq2){Set-Gpu1}
Elseif($choice-eq3){Set-Gpu0}

Код попросит пользователя выбрать один из 3 вариантов, введя число, которое интерпретируется внизу и вызывает функцию, соответствующую этой опции.Проблема в том, что когда он вызывает функцию внизу, он просто выходит из сценария, не выполняя какой-либо код в функции.Вот как это выглядит при запуске:

PS C:\Windows\System32\WindowsPowerShell\v1.0> C:\Users\Colin\Documents\.GPU Miner\0.3.4b\Slushpool Miner.ps1
Here are your choices:
1. All GPUs
2. GPU 0
3. GPU 1
Type the number and press enter to select what GPU(s) to mine with: 3

PS C:\Windows\System32\WindowsPowerShell\v1.0>

Я также попытался сделать это, запустив код непосредственно в операторах «If», и он вернул тот же результат, что и код выше.Может кто-нибудь попытаться помочь мне понять, что я здесь делаю не так?Я новичок в Powershell и не понимаю многих онлайн-руководств по функциям, поскольку они действительно расплывчаты / не соответствуют тому, для чего они мне нужны.

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

Есть несколько проблем с вашей реализацией.Вот один из них: Вы не можете написать

If(-NOT($choice -eq 1 -or 2-or 3)){Is-Invalid}

Это

if(-not($choice -eq 1 -or $choice -eq 2 -or $choice -eq 3)){Is-Invalid}

И это можно написать более кратко с помощью:

if(-not($choice -in 1..3)){Is-Invalid}

Минимальное изменениеЯ вижу, как это работает:

[int]$choice = 0
function Get-Choice()
{
    Write-Host 'Here are your choices:'
    Write-Host '1. All GPUs'
    Write-Host '2. GPU 0'
    Write-Host '3. GPU 1'
    $choice = Read-Host -Prompt 'Type the number and press enter to select what GPU(s) to mine with'
    [int]$choice
}

function Set-Gpu0
{
    Write-Host 'GPU 1 Chosen'
    Start-Sleep -Seconds 2
    miner.exe --server us-east.zec.slushpool.com --port 4444 --user ColinAndress.Colin --pass x --cuda_devices 1 --intensity 64 --eexit 3
    Set-Gpu0
}

function Set-Gpu1
{
    Write-Host 'GPU 0 Chosen'
    Start-Sleep -Seconds 2
    miner.exe --server us-east.zec.slushpool.com --port 4444 --user     ColinAndress.Colin --pass x --cuda_devices 0 --intensity 64 --eexit 3
    Set-Gpu1
}

function Set-All
{
    Write-Host 'All GPUs Chosen'
    Start-Sleep -Seconds 2
    miner.exe --server us-east.zec.slushpool.com --port 4444 --user     ColinAndress.Colin --pass x --cuda_devices 0 1 --intensity 64 64 --eexit 3
    Set-All 
}

function Is-Invalid
{
    Write-Host 'Option is invalid. Pick again'
    Get-Choice # Not going to work
}

$choice = Get-Choice
If(-NOT($choice -in 1..3))
{
    Is-Invalid
}
Elseif($choice -eq 1)
{
    Set-All
}
Elseif($choice -eq 2)
{
    Set-Gpu1
}
Elseif($choice -eq 3)
{
    Set-Gpu0
}

Однако повторный выбор после неверного выбора не будет работать.

0 голосов
/ 31 мая 2018

Что касается новинок, то это хорошо, но лучше всего пройти видео-тренинг через MS Virtual Academy или YouTube, чтобы увидеть все в действии, прежде чем ориентироваться только на текст / книгу.Видя, это делает чтение намного более кратким.Ну, для нас визуальные типы учеников.

Однако, вы прошли через это слишком сложно.Просто нам простое утверждение if или case.Например:

function Get-Choice()
{
    $choice = $null

    'Here are your choices (Select a number):'
    '1. All GPUs'
    '2. GPU 0'
    '3. GPU 1'

    $choice = Read-Host -Prompt 'Type the number and press enter to select what GPU(s) to mine with'
}

switch ($choice) 
    { 
        2 {
                    'GPU 1 Chosen'
                    Start-Sleep -Seconds 2
                    miner.exe --server us-east.zec.slushpool.com --port 4444 --user ColinAndress.Colin --pass x --cuda_devices 1 --intensity 64 --eexit 3
                 } 
        3 {
                    'GPU 0 Chosen'
                    Start-Sleep -Seconds 2
                    miner.exe --server us-east.zec.slushpool.com --port 4444 --user ColinAndress.Colin --pass x --cuda_devices 0 --intensity 64 --eexit 3
                 } 
        1  {
                    'All GPUs Chosen'
                    Start-Sleep -Seconds 2
                    miner.exe --server us-east.zec.slushpool.com --port 4444 --user ColinAndress.Colin --pass x --cuda_devices 0 1 --intensity 64 64 --eexit 3
                 } 
        default  {
                    Write-Warning -Message 'Option is invalid. Pick again'
                    Get-Choice
                 }
    }

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...