Question ARGUMENT COMPLETER / DYNAMIC PARAMETER et Add-member.

Plus d'informations
il y a 5 mois 3 semaines #32207 par Stéphane Schaumburg
Bonjour à tous.

j'ai crée un script qui génère la liste  des résolutions d'écran supportées sur une machine.
Ceci fonctionne parfaitement.

J'ai également créé deux autres scripts qui utilisent le premier.
L'un utilise la liste des résolutions possibles dans un argumentcompleter et cela fonctionne.
L'autre utilise un paramètre dynamique dont le validate set est la liste des résolutions possibles et cela fonctionne également

MON PROBLEME : 
je crée un pscustomobject : OK
J'ajoute une noteproperty resolution et cela fonctionne
J'ajoute une scriptmethod pour définir la valeur de la noteproperty et cela fonctionne ....mais impossible de proposer la liste des valeurs possible dans la méthode de l'objet.List of resolutions                       $Monitors = gwmi -N "root\wmi" -Class WmiMonitorListedSupportedSourceModes                    $PossibleModes = new-object -TypeName system.collections.arraylist                    foreach ($LoopInMonitors in $Monitors)                        {                            foreach ($LoopInPossibleResolution in $LoopInMonitors.MonitorSourceModes)                                {                                $CurrentResolution = "$($LoopInPossibleResolution.HorizontalActivePixels) X $($LoopInPossibleResolution.VerticalActivePixels)"                                $PossibleModes.add($CurrentResolution) | out-null                                } # END foreach ($LoopInPossibleResolution in $LoopInMonitors.MonitorSourceModes)                    } # END foreach ($LoopInMonitors in $Monitors)                    $PossibleModes   Dynamic Parameter function Set-Resolution{    [CmdletBinding()]    [Alias()]    [OutputType([int])]    Param    (     )     Dynamicparam {               $ResolutionAttribute = New-Object System.Management.Automation.ParameterAttribute              $ResolutionAttribute.Position = 0              $ResolutionAttribute.Mandatory = $true              $ResolutionAttribute.HelpMessage = "Select Screen resolution"               $Monitors = gwmi -N "root\wmi" -Class WmiMonitorListedSupportedSourceModes              $PossibleModes = new-object -TypeName system.collections.arraylist              foreach ($LoopInMonitors in $Monitors)                {                    foreach ($LoopInPossibleResolution in $LoopInMonitors.MonitorSourceModes)                        {                            $CurrentResolution = "$($LoopInPossibleResolution.HorizontalActivePixels) X $($LoopInPossibleResolution.VerticalActivePixels)"                            $PossibleModes.add($CurrentResolution) | out-null                        } # END foreach ($LoopInPossibleResolution in $LoopInMonitors.MonitorSourceModes)                } # END foreach ($LoopInMonitors in $Monitors)                           $ValidateSetAttribute = New-Object System.Management.Automation.ValidateSetAttribute($PossibleModes)               #create an attributecollection object for the attribute we just created.              $attributeCollection = new-object System.Collections.ObjectModel.Collection[System.Attribute]               #add our custom attribute              $attributeCollection.Add($ResolutionAttribute)              $attributeCollection.add($ValidateSetAttribute)               #add our paramater specifying the attribute collection              $ResolutionParameter = New-Object System.Management.Automation.RuntimeDefinedParameter('ScreenResolution', [string], $attributeCollection)               #expose the name of our parameter              $paramDictionary = New-Object System.Management.Automation.RuntimeDefinedParameterDictionary              $paramDictionary.Add('ScreenResolution', $ResolutionParameter)              return $paramDictionary      }  Process{             $PSBoundParameters             $SpecifiedResolution = $PSBoundParameters["ScreenResolution"]                         write-host $SpecifiedResolution -ForegroundColor green }    } # END function Verb-Noun   ArgumentCompleter Function set-favoriteresolution    {       [CmdletBinding()]    Param    (    [ArgumentCompleter( {            param ( $commandName,                    $parameterName,                    $wordToComplete,                    $commandAst,                    $fakeBoundParameters )                                           $Monitors = gwmi -N "root\wmi" -Class WmiMonitorListedSupportedSourceModes                    $PossibleModes = new-object -TypeName system.collections.arraylist                    foreach ($LoopInMonitors in $Monitors)                        {                            foreach ($LoopInPossibleResolution in $LoopInMonitors.MonitorSourceModes)                                {                                $CurrentResolution = "$($LoopInPossibleResolution.HorizontalActivePixels) X $($LoopInPossibleResolution.VerticalActivePixels)"                                $PossibleModes.add($CurrentResolution) | out-null                                } # END foreach ($LoopInPossibleResolution in $LoopInMonitors.MonitorSourceModes)                        } # END foreach ($LoopInMonitors in $Monitors)                    $PossibleModes                       } )]    [string]$Resolution     )         write-host "$resolution" -ForegroundColor Green -BackgroundColor White      } # END Function set-favoriteresolution 



 

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 5 mois 2 semaines #32220 par Laurent Dardenne
Salut,
mon problème est que ton code est illisible ;-)

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.084 secondes
Propulsé par Kunena