none
Variable in einer Variable

    Frage

  • Hallo zusammen,

    ist es möglich in eine Variable eine Objektvariable zu speichern?

    In einer Powershell-GUI sind einige Label, TextBoxen und Dropdownmenüs. Diese würde ich gerne mit einer Funktion erstellen um das Skript nicht unnötig in die Länge zu ziehen.

    So in diese Richtung hätte ich gedacht:

    Add-Type -AssemblyName System.Windows.Forms
    Add-Type -AssemblyName System.Drawing
    
    $fenster = New-Object System.Windows.Forms.Form
    $label1 = New-Object System.Windows.Forms.Label
    
    $fenster.Text = 'Fenster'
    $fenster.Size = New-Object System.Drawing.Size(900,900)
    $fenster.StartPosition = 'CenterScreen'
    
    function Labelerstellung
    {
     Param
     (
      [Parameter(Mandatory=$true)] [int]$LocationX,
      [Parameter(Mandatory=$true)] [int]$LocationY,
      [Parameter(Mandatory=$true)] [int]$SizeX,
      [Parameter(Mandatory=$true)] [int]$SizeY,
      [Parameter(Mandatory=$false)] [String]$Text,
      [Parameter(Mandatory=$true)] [String]$Labelname
     )
      $Labelname.Location = New-Object System.Drawing.Point($LocationX,$LocationY)
      $Labelname.Size = New-Object System.Drawing.Size($SizeX,$SizeY)
      $Labelname.Text = 'Nachname:'
      $fenster.Controls.Add($Labelname)
    }
    
    Labelerstellung -LocationX 20 -LocationY 100 -SizeX 30 -SizeY 90 -Text "Testlabel" -Labelname '$LabelXY'
    
    [void] $fenster.ShowDialog()
     

    Mit freundlichen Grüßen

    Dominik Hartl

    Donnerstag, 22. November 2018 11:35

Antworten

  • Also Dein Code ist irgendwie unwahrscheinlich...

    Oben definierst Du $Label1, unten übergibst Du aber '$LabelXY' an Deine Funktion - und zwar in einfachen Anführungszeichen - und in der Funktion nimmst Du das nur als String statt als Objekt entgegen? Spätestens jetzt hast Du natürlich kein Objekt mehr, das eine .Location Property hätte... Die Variable $Labelname Deiner Funktion hat jetzt den Wert [String]'$LabelXY', und zwar literal.

    Parameter(Mandatory=$true)] [System.Windows.Forms.Label]$Labelname # oder den Objekttyp ganz weglassen...

    Labelerstellung -Labelname $Label1

    und der Drops sollte gelutscht sein. Alles sind Objekte :)



    Greetings/Grüße, Martin - https://mvp.microsoft.com/en-us/PublicProfile/5000017 Mal ein gutes Buch über GPOs lesen? - http://www.amazon.de/Windows-Server-2012--8-Gruppenrichtlinien/dp/3866456956 Good or bad GPOs? My blog - http://evilgpo.blogspot.com And if IT bothers me? Coke bottle design refreshment - http://sdrv.ms/14t35cq

    • Als Antwort markiert Dominik Hartl Donnerstag, 22. November 2018 18:54
    Donnerstag, 22. November 2018 16:53

Alle Antworten

  • Im Prinzip schon:

    https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/new-object?view=powershell-6

    $fenster = New-Object -TypeName System.Windows.Forms.Form
    • Als Antwort vorgeschlagen Peddy1st Donnerstag, 22. November 2018 15:47
    Donnerstag, 22. November 2018 11:47
  • Hallo,

    ich verstehe deine Frage noch nicht ganz, denn dein Code sieht auf den ersten Blick schon gut aus. Erzeugt er denn Fehler?

    Viele Grüße

    Christoph

    Donnerstag, 22. November 2018 15:10
  • Dies ist die Fehlermeldung:

    The property 'Location' cannot be found on this object. Verify that the property exists and can be set.

    At line:22 char:3

    +   $Labelname.Location = New-Object System.Drawing.Point($LocationX,$L ...

    +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

        + CategoryInfo          : InvalidOperation: (:) [], RuntimeException

        + FullyQualifiedErrorId : PropertyAssignmentException

    The property 'Size' cannot be found on this object. Verify that the property exists and can be set.

    At line:23 char:3

    +   $Labelname.Size = New-Object System.Drawing.Size($SizeX,$SizeY)

    +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

        + CategoryInfo          : InvalidOperation: (:) [], RuntimeException

        + FullyQualifiedErrorId : PropertyAssignmentException

    The property 'Text' cannot be found on this object. Verify that the property exists and can be set.

    At line:24 char:3

    +   $Labelname.Text = 'Nachname:'

    +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

        + CategoryInfo          : InvalidOperation: (:) [], RuntimeException

        + FullyQualifiedErrorId : PropertyAssignmentException

    Donnerstag, 22. November 2018 15:36
  • Also Dein Code ist irgendwie unwahrscheinlich...

    Oben definierst Du $Label1, unten übergibst Du aber '$LabelXY' an Deine Funktion - und zwar in einfachen Anführungszeichen - und in der Funktion nimmst Du das nur als String statt als Objekt entgegen? Spätestens jetzt hast Du natürlich kein Objekt mehr, das eine .Location Property hätte... Die Variable $Labelname Deiner Funktion hat jetzt den Wert [String]'$LabelXY', und zwar literal.

    Parameter(Mandatory=$true)] [System.Windows.Forms.Label]$Labelname # oder den Objekttyp ganz weglassen...

    Labelerstellung -Labelname $Label1

    und der Drops sollte gelutscht sein. Alles sind Objekte :)



    Greetings/Grüße, Martin - https://mvp.microsoft.com/en-us/PublicProfile/5000017 Mal ein gutes Buch über GPOs lesen? - http://www.amazon.de/Windows-Server-2012--8-Gruppenrichtlinien/dp/3866456956 Good or bad GPOs? My blog - http://evilgpo.blogspot.com And if IT bothers me? Coke bottle design refreshment - http://sdrv.ms/14t35cq

    • Als Antwort markiert Dominik Hartl Donnerstag, 22. November 2018 18:54
    Donnerstag, 22. November 2018 16:53
  • Habe es genau so gemacht und es funktioniert.

    Danke durch dich spar ich mir viel Code.

    Donnerstag, 22. November 2018 18:55