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-ID: 6198042713

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

Ausgedruckt am: 19.12.2024 um 09:12 Uhr

TK1987
Lösung TK1987 03.03.2023 aktualisiert um 09:56:30 Uhr
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
SPSman
SPSman 03.03.2023 um 11:00:33 Uhr
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"