Bird
Raised Fist0
PowerShellscripting~5 mins

Adding methods with ScriptMethod in PowerShell - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is a ScriptMethod in PowerShell?
A ScriptMethod is a way to add a custom method to an object in PowerShell using a script block. It lets you extend objects with new behaviors.
Click to reveal answer
beginner
How do you add a ScriptMethod to an existing object in PowerShell?
Use the Add-Member cmdlet with the -MemberType ScriptMethod parameter, specifying the method name and a script block for the method's code.
Click to reveal answer
beginner
Example: What does this code do? $person = New-Object PSObject -Property @{Name='Anna'} $person | Add-Member -MemberType ScriptMethod -Name Greet -Value { "Hello, $($this.Name)!" } $person.Greet()
It creates a new object with a Name property 'Anna'. Then it adds a method called Greet that returns a greeting string using the Name. Calling $person.Greet() outputs: Hello, Anna!
Click to reveal answer
intermediate
Why use $this inside a ScriptMethod in PowerShell?
$this refers to the current object the method is attached to. It lets the method access the object's properties and other data.
Click to reveal answer
beginner
Can you add multiple ScriptMethods to the same object?
Yes, you can add as many ScriptMethods as you want to an object using Add-Member. Each method can have its own name and script block.
Click to reveal answer
Which cmdlet is used to add a ScriptMethod to an object in PowerShell?
ANew-Method
BAdd-Member
CSet-Method
DInvoke-Method
In a ScriptMethod, what does $this represent?
AThe method's parameters
BThe global scope
CThe current object the method belongs to
DThe script file
What type of member do you specify to Add-Member to add a method with a script block?
AScriptMethod
BAliasProperty
CNoteProperty
DScriptProperty
What will this code output? $car = New-Object PSObject -Property @{Make='Ford'} $car | Add-Member -MemberType ScriptMethod -Name ShowMake -Value { "Make is $($this.Make)" } $car.ShowMake()
AMake is Ford
BMake is $this.Make
CError: Method not found
DMake is
Can ScriptMethods access properties of the object they are added to?
AOnly if properties are global
BNo, they are independent
COnly if passed as parameters
DYes, using $this
Explain how to add a custom method to a PowerShell object using ScriptMethod.
Think about how you tell PowerShell to add a new behavior to an object.
You got /5 concepts.
    Describe the role of $this inside a ScriptMethod in PowerShell and why it is important.
    Consider how a method knows which object's data to use.
    You got /4 concepts.

      Practice

      (1/5)
      1. What does the Add-Member -MemberType ScriptMethod cmdlet do in PowerShell?
      easy
      A. Deletes a property from an object
      B. Adds a custom method (function) to an existing object
      C. Creates a new object from scratch
      D. Converts an object to a string

      Solution

      1. Step 1: Understand Add-Member usage

        Add-Member is used to add properties or methods to existing objects in PowerShell.
      2. Step 2: Focus on ScriptMethod type

        When -MemberType ScriptMethod is used, it adds a method (a function) that can be called on the object.
      3. Final Answer:

        Adds a custom method (function) to an existing object -> Option B
      4. Quick Check:

        Add-Member ScriptMethod = Adds method [OK]
      Hint: ScriptMethod adds functions to objects, not properties [OK]
      Common Mistakes:
      • Confusing ScriptMethod with adding properties
      • Thinking it creates new objects
      • Assuming it deletes object members
      2. Which of the following is the correct syntax to add a ScriptMethod named Greet to an object $obj that returns 'Hello'?
      easy
      A. $obj | Add-Member -MemberType ScriptMethod -Name Greet -Value { 'Hello' }
      B. Add-Member -InputObject $obj -MemberType ScriptProperty -Name Greet -Value { 'Hello' }
      C. $obj.AddMember('Greet', { 'Hello' })
      D. Add-Member -InputObject $obj -MemberType ScriptMethod -Name Greet -Value 'Hello'

      Solution

      1. Step 1: Identify correct Add-Member syntax

        The cmdlet requires piping the object or using -InputObject, specifying -MemberType ScriptMethod, -Name, and a script block for -Value.
      2. Step 2: Check each option

        $obj | Add-Member -MemberType ScriptMethod -Name Greet -Value { 'Hello' } correctly pipes $obj and uses a script block { 'Hello' } as the method body. Add-Member -InputObject $obj -MemberType ScriptProperty -Name Greet -Value { 'Hello' } uses ScriptProperty, which is wrong. $obj.AddMember('Greet', { 'Hello' }) is invalid syntax. Add-Member -InputObject $obj -MemberType ScriptMethod -Name Greet -Value 'Hello' passes a string instead of a script block.
      3. Final Answer:

        $obj | Add-Member -MemberType ScriptMethod -Name Greet -Value { 'Hello' } -> Option A
      4. Quick Check:

        ScriptMethod needs script block value [OK]
      Hint: Use a script block { } for ScriptMethod -Value [OK]
      Common Mistakes:
      • Using ScriptProperty instead of ScriptMethod
      • Passing string instead of script block
      • Wrong cmdlet syntax without piping or -InputObject
      3. What will be the output of this PowerShell code?
      $obj = New-Object PSObject -Property @{Name='Alice'}
      $obj | Add-Member -MemberType ScriptMethod -Name SayName -Value { "My name is $($this.Name)" }
      $obj.SayName()
      medium
      A. My name is
      B. My name is $this.Name
      C. My name is Alice
      D. Error: Property 'Name' not found

      Solution

      1. Step 1: Understand object and method

        $obj has a property Name='Alice'. The ScriptMethod SayName uses $this.Name to access that property.
      2. Step 2: Evaluate method call output

        Calling $obj.SayName() runs the script block, replacing $($this.Name) with 'Alice', so output is 'My name is Alice'.
      3. Final Answer:

        My name is Alice -> Option C
      4. Quick Check:

        $this.Name accesses property correctly [OK]
      Hint: Use $this to access object properties inside ScriptMethod [OK]
      Common Mistakes:
      • Expecting literal $this.Name output
      • Confusing property access syntax
      • Thinking method won't access object properties
      4. Identify the error in this code snippet that tries to add a ScriptMethod to $obj:
      $obj = New-Object PSObject -Property @{Age=30}
      Add-Member -InputObject $obj -MemberType ScriptMethod -Name GetAge -Value { return $Age }
      $obj.GetAge()
      medium
      A. The property Age does not exist on $obj
      B. Add-Member requires piping the object, not -InputObject
      C. ScriptMethod cannot return values
      D. The script block should use $this.Age to access the property

      Solution

      1. Step 1: Check property access inside ScriptMethod

        The script block uses $Age which is undefined in this scope. To access the object's property, use $this.Age.
      2. Step 2: Verify other parts

        Using -InputObject is valid. ScriptMethod can return values. Property Age exists on $obj.
      3. Final Answer:

        The script block should use $this.Age to access the property -> Option D
      4. Quick Check:

        Use $this.Property inside ScriptMethod [OK]
      Hint: Inside ScriptMethod, always use $this.Property to access object data [OK]
      Common Mistakes:
      • Using property name without $this inside script block
      • Thinking piping is mandatory for Add-Member
      • Assuming ScriptMethod can't return values
      5. You want to add a ScriptMethod FullName to an object $person that has properties FirstName and LastName. The method should return the full name with a space between first and last names. Which code correctly implements this?
      hard
      A. $person | Add-Member -MemberType ScriptMethod -Name FullName -Value { "$($this.FirstName) $($this.LastName)" }
      B. $person | Add-Member -MemberType ScriptProperty -Name FullName -Value { "$($this.FirstName) $($this.LastName)" }
      C. $person | Add-Member -MemberType ScriptMethod -Name FullName -Value { $this.FirstName + $this.LastName }
      D. $person | Add-Member -MemberType ScriptMethod -Name FullName -Value { return "$this.FirstName $this.LastName" }

      Solution

      1. Step 1: Confirm correct MemberType and method body

        The method must be a ScriptMethod, not ScriptProperty.
      2. Step 2: Check string concatenation and property access

        $person | Add-Member -MemberType ScriptMethod -Name FullName -Value { "$($this.FirstName) $($this.LastName)" } uses string interpolation with $($this.FirstName) and $($this.LastName) separated by space, which correctly returns full name.
      3. Step 3: Analyze other options

        $person | Add-Member -MemberType ScriptMethod -Name FullName -Value { $this.FirstName + $this.LastName } concatenates without space. $person | Add-Member -MemberType ScriptMethod -Name FullName -Value { return "$this.FirstName $this.LastName" } uses return but misses $() around variables, so variables won't expand properly.
      4. Final Answer:

        $person | Add-Member -MemberType ScriptMethod -Name FullName -Value { "$($this.FirstName) $($this.LastName)" } -> Option A
      5. Quick Check:

        Use string interpolation with $() for properties [OK]
      Hint: Use "$($this.Prop) $($this.Prop)" for spaced string in ScriptMethod [OK]
      Common Mistakes:
      • Using ScriptProperty instead of ScriptMethod
      • Concatenating strings without space
      • Not using $() for property expansion inside strings
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard