Bird
Raised Fist0
PowerShellscripting~10 mins

Adding methods with ScriptMethod in PowerShell - Interactive Code Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to add a ScriptMethod named 'Greet' to the object $obj.

PowerShell
$obj.PSObject.Members.Add((New-Object System.Management.Automation.PSMethod('Greet', [1])))
Drag options to blanks, or click blank then click option'
A{ param() 'Hello!' }
B{ Write-Host 'Hello!' }
C{ return 'Hi' }
D{ 'Hello World' }
Attempts:
3 left
💡 Hint
Common Mistakes
Using Write-Host inside the script block instead of returning a value.
Not using a script block as the second argument.
Omitting param() in the script block.
2fill in blank
medium

Complete the code to call the 'Greet' method on the object $obj.

PowerShell
$message = $obj.[1]()
Drag options to blanks, or click blank then click option'
ASayHello
BGreet
CHello
DSpeak
Attempts:
3 left
💡 Hint
Common Mistakes
Using a different method name than the one added.
Forgetting the parentheses to call the method.
3fill in blank
hard

Fix the error in adding a ScriptMethod that returns the object's name property.

PowerShell
$obj.PSObject.Members.Add((New-Object System.Management.Automation.PSMethod('GetName', [1])))
Drag options to blanks, or click blank then click option'
A{ param() $Name }
B{ return $obj.Name }
C{ param() return $this.Name }
D{ $this.Name }
Attempts:
3 left
💡 Hint
Common Mistakes
Using $obj inside the script block which is not defined there.
Omitting param() causing errors.
Not returning the value explicitly.
4fill in blank
hard

Fill the blank to add a ScriptMethod 'AddNumbers' that takes two parameters and returns their sum.

PowerShell
$obj.PSObject.Members.Add((New-Object System.Management.Automation.PSMethod('AddNumbers', [1])))
Drag options to blanks, or click blank then click option'
Areturn $a + $b
B{ $a + $b }
C$a + $b
D{ param($a, $b) $a + $b }
Attempts:
3 left
💡 Hint
Common Mistakes
Not defining parameters in the script block.
Omitting the script block syntax {}.
Using incorrect syntax for the script block.
5fill in blank
hard

Fill all three blanks to create an object $obj with a ScriptMethod 'Describe' that returns a string with the object's Name and Age.

PowerShell
$obj = New-Object PSObject -Property @{ Name = 'Alice'; Age = 30 }

$scriptBlock = [1]

$obj.PSObject.Members.Add((New-Object System.Management.Automation.PSMethod('Describe', $scriptBlock)))

$result = $obj.[2]()

Write-Output [3]
Drag options to blanks, or click blank then click option'
A{ param() "Name: $($this.Name), Age: $($this.Age)" }
BDescribe
C$result
DDescribe()
Attempts:
3 left
💡 Hint
Common Mistakes
Not using $this to access properties inside the script block.
Calling the method incorrectly without parentheses.
Trying to output the method name instead of the result variable.

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