私はいくつかの PowerShell コードに取り組んでおり、可能な限り読みやすくしようとしています (PowerShell が非常に優れているものです)。Add-Member 関数と Get-Member 関数がありますが、関連する Set-Member 関数はありません。そこで、プロジェクト用に作成することにしました。ただし、関数自体では (以下に示すように)、次の行を使用する必要があります。
$_.$NotePropertyName = $NotePropertyValue
仕事に。ただし、次の行を使用する必要があると思いますが、機能しません。
$InputObject.$NotePropertyName = $NotePropertyValue
なぜこのように反応するのでしょうか?
Function Set-Member
{
[CmdletBinding(DefaultParameterSetName='Message')]
param(
[Parameter(ParameterSetName='Message', Position=0, ValueFromPipeline=$true)] [object[]]$InputObject,
[Parameter(ParameterSetName='Message', Mandatory=$true)] [string]$NotePropertyName,
[Parameter(ParameterSetName='Message', Mandatory=$true)] [string]$NotePropertyValue
)
$strInitialValue = $InputObject.($NotePropertyName) # Get the value of the property FirstName
# for the current object in the pipe
$_.$NotePropertyName = $NotePropertyValue
}
$objTest = [PSCustomObject]@ {
FirstName = "Bob"
LastName = "White"
}
$objTest | ForEach-Object {
$_ | Set-Member -NotePropertyName "FirstName" -NotePropertyValue "Joe"
$_ # Push the object back out the pipe
}
$objTest | ForEach-Object {
$_ | Set-Member -NotePropertyName "FirstName" -NotePropertyValue "Bobby$($_.FirstName)"
$_ # Push the object back out the pipe
}