PS Projects to teach junior employees?

Welcome Forums General PowerShell Q&A PS Projects to teach junior employees?

Viewing 7 reply threads
  • Author
    Posts
    • #224403
      Participant
      Topics: 3
      Replies: 12
      Points: 78
      Rank: Member

      Hi All,

      New to the forums; brief intro: been using PowerShell for about the past 4 years – started with the PowerShell in a Month of Lunches, and Don Jones YouTube videos, and now I’ve made API modules, database modules, alerting automation, all sorts of goodness.

      I have some co-workers who are just now finding time to start learning PowerShell, instead of doing things through the GUI. I want to foster this hard. To do that, I want to come up with some fun Beginner PowerShell projects they could do. The problem is, I keep thinking up things that would need to use Cim objects, or advanced functions, or a deeper understanding of dotNet than a beginner would have – and they don’t even know what a module is yet.

      Does anyone have any good beginner projects? Maybe someone – who’s an even bigger pack-rat than I am – still has their first scripts laying around, and could go into “here’s one that taught me a lot”, etc. The best I was able to come up with was asking them to use Select-Object to grab specific properties, or use Get-ChildItem with the ‘-include’ to introduce wildcards… that being said, one of them was able to copy-paste enough powershell to get logged into Office 365 EXO, and export a CSV of all the mailboxes – though I’m 100% certain he learned very little from doing that, and just copy-pasted example code from docs.microsoft.com.

      TL:DR – If you had some Help-desk or Junior admin wanting to learn PowerShell, what PowerShell tasks would you give them? (Assuming you also got to check their code afterwards)

      I’m thinking something with active directory? Problem is, it feels like a one step problem to answer. “Get all the users who ____” — Get-AdUser -f {'____' -eq '___'} – you know what I mean?

    • #224412
      Participant
      Topics: 39
      Replies: 108
      Points: 620
      Rank: Major Contributor

      Probably not a project, but as somone who has been developing in powershell for past 1.5 years, ive learned a lot of good tactics that i wish i knew before, and i would encourage new beginners to keep in mind when developing further with powershell. maybe these tips are some things you could incorporate into potential project for these employees?

      1. splatting
      2. piping
      3. pscustomobject (my favorite!) for nice and organized logging
      • This reply was modified 3 weeks, 5 days ago by cataster16.
    • #224448
      Participant
      Topics: 4
      Replies: 2231
      Points: 5,414
      Helping Hand
      Rank: Community MVP

      TL:DR – If you had some Help-desk or Junior admin wanting to learn PowerShell, what PowerShell tasks would you give them? (Assuming you also got to check their code afterwards)

      When I need to help a user I try to get as much information as possible first. Even before I ask for the issue I ask for the username and maybe the computername if these information are not related in a way anyway.

      I wrote a little module with some functions for gathering the infromation from the AD and from the computer helping me solving the really simple stuff like locked accounts or something like this.

      That could be a nice task for a Help-Desk-Youngling I think. 😉

    • #224472
      Participant
      Topics: 3
      Replies: 324
      Points: 1,056
      Helping Hand
      Rank: Community Hero

      Yeah you can’t go wrong with a PC inventory list and after that they can move on to mailing it. There are so many examples of this topic online so they get to learn about all the negatives of just copy/paste.

    • #224676
      Participant
      Topics: 24
      Replies: 172
      Points: 557
      Helping Hand
      Rank: Major Contributor

      I took an entire IT team through the month of lunches books for training.  The best advice I can give to anyone trying to become proficient, is to stop using the gui’s.

      Easiest places to start are Active Directory, and basic server admin/info gathering tasks.  Forcing yourself to use the shell instead of the mouse is the only way people become really proficient.  Take one task a day, and figure out how to do it in the shell, save the script, rinse and repeat.  Avoid using others scripts especially in the beginning as that becomes a crutch, and doesn’t help you learn the logic.

      Sure it can be MUCH slower in the beginning, but we all have to start somewhere.

      once you gain knowledge and basic skills, the PSKoans can be an awesome way to test, and improve your knowledge.

       

       

       

       

    • #224721
      Participant
      Topics: 3
      Replies: 12
      Points: 78
      Rank: Member

      Yeah you can’t go wrong with a PC inventory list and after that they can move on to mailing it. There are so many examples of this topic online so they get to learn about all the negatives of just copy/paste.

      Hmm… I feel like any inventory someone does would need to leverage WMI/CIM. While that’s definitely on the list for future learning, I’m still trying to get across “yes, you’re looking at text when this cmdlet runs, but you have to remember it’s an object”. Though I think your suggestion gave me an idea – auditing share permissions, and/or ntfs acl’s. There are direct cmdlets for those, and might help to learn the value of ‘gcm’.

      When I need to help a user I try to get as much information as possible first. Even before I ask for the issue I ask for the username and maybe the computername if these information are not related in a way anyway.

      I wrote a little module with some functions for gathering the infromation from the AD and from the computer helping me solving the really simple stuff like locked accounts or something like this.

      That could be a nice task for a Help-Desk-Youngling I think. 😉

      Hmm… so maybe like – some script that returns a psobject like :

      $User = New-Object -Type psobject -prop @{
          SamAccountName = $ADUser.SamAccountName
          PasswordLastChanged = $ADUser.PasswordLastSet
          AccountLockedOut = $UserInSearchADAccount_LockedOut #Boolean value from ((Search-ADAccount -LockedOut).SamAccountName -contains $ADuser.SamAccountName)
          ...
      }

      Is that the kind of thing you’re suggesting?

       

      Probably not a project, but as somone who has been developing in powershell for past 1.5 years, ive learned a lot of good tactics that i wish i knew before, and i would encourage new beginners to keep in mind when developing further with powershell. maybe these tips are some things you could incorporate into potential project for these employees?

      1. splatting
      2. piping
      3. pscustomobject (my favorite!) for nice and organized logging

      Hmm… so, I 100% agree with piping, and I definitely think PSObjects are a great way to put together information from various locations into a single item to work with down the pipeline… but I don’t know if Splatting is the thing to make a beginners life easier. Maybe I just haven’t used it in the same use-cases as you — where do you think Splatting could have made your life easier when you were a beginner?

       

      I took an entire IT team through the month of lunches books for training. The best advice I can give to anyone trying to become proficient, is to stop using the gui’s.

      Easiest places to start are Active Directory, and basic server admin/info gathering tasks. Forcing yourself to use the shell instead of the mouse is the only way people become really proficient. Take one task a day, and figure out how to do it in the shell, save the script, rinse and repeat. Avoid using others scripts especially in the beginning as that becomes a crutch, and doesn’t help you learn the logic.

      Sure it can be MUCH slower in the beginning, but we all have to start somewhere.

      once you gain knowledge and basic skills, the PSKoans can be an awesome way to test, and improve your knowledge.

      I 100% agree that not using the GUI is the only real way to make progress, but it’s unfortunately not going to happen for some of these guys :-/ These guys don’t know CIM/WMI, or C# – so whatever tasks they try to script up, it needs to be do-able with the pre-built cmdlets in PS. The problem is:

      1. They don’t know what’s possible to do with pure PowerShell
      2. I keep thinking of tasks that I would find simple, but would be impenetrable to a complete beginner.

      For example, these guys don’t have Computer Science degrees – so base things like floats and strings that make perfect sense to us, are still things that require translation to them.

      I have never seen PSKoans before. I’m looking at the repo now – and it seems fun. I’ll have to play around with that a bit and see if I can explain it to the juniors.

       

      Current Ideas:

      • NTFS ACL Audit Report
      • SMB Share Permissions Audit Report
      • Get-UserInfo Module <# from AD and/or other sources #>
      • This reply was modified 3 weeks, 4 days ago by mitchvh05.
      • This reply was modified 3 weeks, 4 days ago by mitchvh05. Reason: cleaned up copy-paste from vscode in Pre tag
    • #224766
      Participant
      Topics: 12
      Replies: 1610
      Points: 2,508
      Helping Hand
      Rank: Community Hero

      Work on GET operations. Comparison operators lead into data types (e.g. can’t compare a date string to a date). Filter left, use the command to filter from the source, not get everything and filter with WHERE. Building objects with WMI inventories. Explaing HashTable\Arrays. Build objects with New-Object, [pscustombject] and calculated expressions with Select. Show Add-Member, but personally feel that is a deprecated method. Looping, implicit and explicit. There is also a dedicated thread to teaching that you can read thru:

      Teaching PowerShell

    • #224778
      Participant
      Topics: 3
      Replies: 324
      Points: 1,056
      Helping Hand
      Rank: Community Hero

      I think the best place to start is reading. They can get familiar with using the shell, by using it to read the help. You can provide them a “beginner” list if you think they may be overwhelmed with the amount of help topics. Here are some that should be extremely useful, if not required, to learn.

      help about_variables
      help about_logical_operators
      help about_Arithmetic_Operators
      help about_Aliases
      help about_PowerShell.exe
      help about_PowerShell_Ise.exe
      help about_Windows_PowerShell_5.0
      help about_Windows_PowerShell_ISE

      And naturally they should become very familiar with these core cmdlets right away.

      
      get-help
      
      get-command
      
      get-member
      
      get/set-executionpolicy
      
      

       

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