Need help with Powershell scripting basics

Welcome Forums General PowerShell Q&A Need help with Powershell scripting basics

  • This topic has 7 replies, 2 voices, and was last updated 1 month ago by
    Participant
    .
Viewing 7 reply threads
  • Author
    Posts
    • #235570
      Participant
      Topics: 1
      Replies: 3
      Points: 19
      Rank: Member

      I have to write a script for my class with an output like this:

      --ENTER--INTRUSIONS-----
      Mon 11 
      Tue 2
      Wed 5
      Thr 7
      Fri 13
      ------INTRUSIONS--------
      
      Mon 11
      Tue 2
      Wed 5
      Thr 7
      Fri 13
      
      Total 38
      
      Average 7.6
      ------------------------
      
      Mon had the most intrusions at 11
      Tue had the least intrusions at 2
      ------------------------

      I can get all the information but I can’t figure out how to get the day to show for the last two lines.

      $days = @(“Mon”, “Tue”, “Wed”, “Thr”, “Fri”)
      $attacks = @(0,0,0,0,0)
      $total = 0
      $most = 0
      $least = 99999
      Write-Host “–Enter–Intrusions–“
      for ($day = 0; $day -lt $days.Length; $day++) {
          $attacks[$day] = Read-Host $days[$day]
      }
      write-host “——INTRUSIONS——“
      Write-host ” “
      for ($day = 0; $day -lt $days.Length; $day++) {
          Write-Host $days[$day] ” ” $attacks[$day]
          $total = $total+=$attacks[$day]
      }
      $average = $total / 5
      Write-Host ” “
      write-Host “Total” $total
      write-host ” “
      write-Host “Average” $Average
      for ($day = 0; $day -lt $days.Length; $day++) {
          if ($attacks[$day] -gt $most) {
              $most = $attacks[$day]
          }
      }
      for ($day = 0; $day -lt $days.Length; $day++) {
          if ($attacks[$day] -lt $least) {
              $least = $attacks[$day]
              }
      }
      Write-Host $most
      Write-Host $least
    • #235585
      Participant
      Topics: 5
      Replies: 2384
      Points: 6,066
      Helping Hand
      Rank: Community MVP

      Randall, welcome to Powershell.org. Please take a moment and read the very first post on top of the list of this forum: Read Me Before Posting! You’ll be Glad You Did!.

      When you post code, error messages, sample data or console output format it as code, please.
      In the “Text” view you can use the code tags “PRE“, in the “Visual” view you can use the format template “Preformatted“. You can go back edit your post and fix the formatting – you don’t have to create a new one.
      Thanks in advance.

      If you have related data you should save them together as related data. 😉

      I’d do it this way:

      $Data = @'
      Day,AttackCount
      Mon,
      Tue,
      Wed,
      Thr,
      Fri,
      '@ |
          ConvertFrom-Csv
      
      Clear-Host 
      foreach ($item in $Data) {
          [INT]$item.AttackCount = Read-Host -Prompt "Enter amount of attacks for '$($item.Day)'"
      }
      
      $Result = $Data | Measure-Object -Property AttackCount -AllStats
      $SortedData = $Data | Sort-Object -Property AttackCount
      
      Clear-Host 
      "  Total amount of attacks: '$($Result.Sum)'"
      "Average amount of attacks: '$($Result.Average)'"
      "Minimum amount of attacks: '$($Result.Minimum)' at '$($SortedData[0].Day)'"
      "Maximum amount of attacks: '$($Result.Maximum)' at '$($SortedData[-1].Day)'"
      

      Of course – as always – there’s a lot of room for improvements. 😉

    • #235669
      Participant
      Topics: 1
      Replies: 3
      Points: 19
      Rank: Member

      I keep getting an error at the -AllStats in line 16.

    • #235675
      Participant
      Topics: 5
      Replies: 2384
      Points: 6,066
      Helping Hand
      Rank: Community MVP

      When you post error messages you should always post them completely.

      I keep getting an error at the -AllStats in line 16.

      And what have you tried to solve this issue? You should ALWAYS read the help for the cmdlets you’re about to use. Read it complete including the examples to learn how to use them.
      You may compare the two help versions :

      https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/measure-object?view=powershell-7

      https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/measure-object?view=powershell-5.1

      Then you may think about for a moment what version of Powershell do you use and the solution will be obvious. 😉

    • #235801
      Participant
      Topics: 1
      Replies: 3
      Points: 19
      Rank: Member

      Thank you for your help!

    • #235840
      Participant
      Topics: 5
      Replies: 2384
      Points: 6,066
      Helping Hand
      Rank: Community MVP

      😉 …. just because I’m curious and it might help others looking for the same or a similar issue – wouldn’t you like to share your solution?

    • #235846
      Participant
      Topics: 1
      Replies: 3
      Points: 19
      Rank: Member

      Since I was running Powershell 5.1 the -AllStats wasn’t available. Once I downloaded Powershell 7 the script worked perfectly.

    • #235849
      Participant
      Topics: 5
      Replies: 2384
      Points: 6,066
      Helping Hand
      Rank: Community MVP

      Well … I would have simply changed -AllStats to -Sum -Average -Maximum -Minimum as that would provide the needed results. But it’s a great idea as well to have the new version of Powershell and maybe benefit from new features. 😉

Viewing 7 reply threads
  • You must be logged in to reply to this topic.