spsman
Goto Top

Powershell eigenes Objekt in Funktion verändern

Hallo,'
ich habe Folgende Funktion:

{      
    return [pscustomobject] @{ 
        'Date' = Get-Date  
        'Beschreibung' = "Was"  
        'Verantwortlich' = "ich"      
    }
}

function Write-Obj
{
    [CmdletBinding()]
    Param(
        [Parameter(Mandatory=$True)]
        [Object[]]$InputObject 
    )
    begin {}
    process
    {
        Write-Host $InputObject.GetType()

        $M= Get-Member $InputObject
        Write-Host $M


        $InputObject
        $InputObject.Date = $InputObject.Date.AddDays(100)
        $InputObject.Beschreibung = "neue Zeit"  
        $InputObject.Verantwortlich = "Mein zukünftiges ICH"  

        Write-Host "Innen: $InputObject " # Does not return anything  

        return $InputObject

    }
    end {}
}

$ReqData = CreateObject

Write-Host "Außen: $ReqData "  

$NewData = Write-Obj ($ReqData)

Write-Host "Außen2: $NewData"  

Obwohl "Gettype" ein Object erkennt, kann ich nicht auf die einzelnen Eigenschaften zugreifen.

Habe Ihr einen Tipp?

Content-Key: 6198042713

Url: https://administrator.de/contentid/6198042713

Printed on: April 27, 2024 at 16:04 o'clock

Member: TK1987
Solution TK1987 Mar 03, 2023 updated at 08:56:30 (UTC)
Goto Top
Moin,

Zitat von @SPSman:
{      
    return [pscustomobject] @{ 
        'Date' = Get-Date  
        'Beschreibung' = "Was"  
        'Verantwortlich' = "ich"      
    }
}
Hier fehlt offensichtlich das
Function CreateObject

[Object[]]$InputObject
Beachte, dass der Parameter hier kein Objekt ergibt, sondern ein Array aus Objekten!
Wenn du dann später Get-Member ausführst, bekommst du (ohne Angabe eines Index) die Member des Arrays und nicht die des Objekts. Das Hinzufügen von Eigenschaften führt dann gar zu einem Fehler, da man keine Eigenschaften zu einen Array hinzufügen kann.

$M= Get-Member $InputObject
Get-Member muss hier die Parameterangabe -InputObject bekommen. Dieser kann abgekürzt sein, aber in dem Fall nicht ausgelassen werden.

Write-Host $M
Bei Write-Host-Ausgaben von Objekten empfielt es sich immer, diese vorher in eine Zeichenkette zu konvertieren
Write-Host ($M | Out-String)

Gruß Thomas
Member: SPSman
SPSman Mar 03, 2023 at 10:00:33 (UTC)
Goto Top
Zitat von @TK1987:

Moin,
...
Gruß Thomas

Hi,

Danke Das Wars Jetzt geht alles:
function CreateObject()
{      
    return [pscustomobject] @{ 
        'Date' = Get-Date  
        'Beschreibung' = "Was"  
        'Verantwortlich' = "ich"      
    }
}

function Write-Obj
{
    [CmdletBinding()]
    Param(
        [Parameter(Mandatory=$True)]
        [Object]$InputObject 
    )
    begin {}
    process
    {
        Write-Host $InputObject.GetType()

        $M= Get-Member -InputObject $InputObject
        Write-Host $M


        
        $InputObject.Date = $InputObject.Date.AddDays(100)
        $InputObject.Beschreibung = "neue Zeit"  
        $InputObject.Verantwortlich = "Mein zukünftiges ICH"  

        Write-Host "Innen: $InputObject " # Does not return anything  

        return $InputObject

    }
    end {}
}

$ReqData = CreateObject

Write-Host "Außen: $ReqData "  

$NewData = Write-Obj ($ReqData)

Write-Host "Außen2: $NewData"