Question ARGUMENT COMPLETER / DYNAMIC PARAMETER et Add-member.
- Stéphane Schaumburg
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 1
- Remerciements reçus 0
il y a 1 an 8 mois #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
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.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6298
- Remerciements reçus 68
il y a 1 an 7 mois #32220
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet ARGUMENT COMPLETER / DYNAMIC PARAMETER et Add-member.
Salut,
mon problème est que ton code est illisible
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.074 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les initiés
- ARGUMENT COMPLETER / DYNAMIC PARAMETER et Add-member.