2016-03-24 1 views
0

Здравствуйте PowerShell Эксперты,случайных чисел добавить до определенного числа с помощью PowerShell

Я работаю на простой код, который производит список продуктов и задачи (продукт имеет несколько задач) с указанием времени тратить на него " Случайно". Я хочу, чтобы totalTime добавляло время до 40 (целое) (и может быть изменено как определено пользователем, например 50, 60 и т. Д.).

Код работает нормально, но он просто не составляет до 40. Не могли бы вы помочь?

Бонус: Могу ли я назначить вес для продукта или задачи, чтобы он стал приоритетом при случайном выборе? например Я хочу потратить больше времени на P3 и P7 с T3, T12 и T15. Время еще следует добавить до 40.

cls 
[int]$totalTime = 40 # This will be the number that the TotalTime Adds up 

$taskCategories = @("T1" 
"T2", 
"T3", 
"T4", 
"T5", 
"T6", 
"T7", 
"T8", 
"T9", 
"T10", 
"T11", 
"T12", 
"T13", 
"T14", 
"T15") 

$products = @("P1" 
, "P2" 
, "P3" 
, "p4" 
, "P5" 
, "P6" 
, "P7" 
, "P8" 
, "P9" 
, "P10") 

for ($i = 0; $i -le 1; ++$i) 
{ 
    $totalTime = 0 
    while ($totalTime -lt 40) 
    { 
     [int]$task = Get-Random -Minimum 0 -Maximum 16 
     [int]$product = Get-Random -Minimum 0 -Maximum 11 
     $time = Get-Random -Minimum 4 -Maximum 10 

     Write-Output "$($products[$product])`t$($taskCategories[$task])`t$time" 
     $totalTime = $totalTime + $time 
    } 
} 

Ниже вывод, что я получаю:

enter image description here

ответ

1
cls 
[int]$totalTime = 40 # This will be the number that the TotalTime Adds up 

$taskCategories = @("T1", "T2", "T3", "T4", "T5", 
        "T6", "T7", "T8", "T9", "T10", "T11", "T12", "T13", "T14", "T15") 

$products = @("P1", "P2", "P3", "P4", "P5", "P6", "P7", "P8", "P9", "P10") 

$totalTime = 0 
$MinValue = 4 

for ($i = 0; $i -le 1; ++$i) 
{ 

    while ($totalTime -lt 40) 
    { 
     if (40 - $totalTime -ge 10) 
     { 
     $MaxValue = 10 
     } 
     else 
     { 
     $MaxValue = 40 - $totalTime 
     } 

     if ($MinValue -lt $MaxValue) 
     { 
     $MinValue = 4 
     } 
     else 
     { 
     $MinValue = $MaxValue 
     } 


     [int]$task = Get-Random -Minimum 0 -Maximum 15 
     [int]$product = Get-Random -Minimum 0 -Maximum 10 
     if ($MinValue -eq 4) 
     { 
     $time = Get-Random -Minimum $MinValue -Maximum $MaxValue 
     } 
     else 
     { 
     $time = $MaxValue 
     } 
     $totalTime = $totalTime + $time 
     $Remainder = 40 - $totalTime 
     if ($Remainder -le 3) 
     { 
     $time = $time + $Remainder 
     $totalTime = $totalTime + $time 
     } 

     Write-Output "$($products[$product])`t$($taskCategories[$task])`t$time" 

    } 
} 
+0

Спасибо @kenny .. это работает. – Kin

1

$totalTime Перемещение из FOR LOOP, который будет работать ..

####### 
$totalTime = 0 
####### 

for ($i = 0; $i -le 1; ++$i) 
{ 
    while ($totalTime -lt 40) 
    { 
     [int]$task = Get-Random -Minimum 0 -Maximum 16 
     [int]$product = Get-Random -Minimum 0 -Maximum 11 
     $time = Get-Random -Minimum 4 -Maximum 10 

     Write-Output "$($products[$product])`t$($taskCategories[$task])`t$time" 
     $totalTime = $totalTime + $time 
    } 
} 
+0

Глупый я .. Я должен был подумать об этом. Но даже если я ставлю '$ totalTime' согласно вашему предложению, время немного больше 40. Спасибо за вашу помощь. – Kin