Use ValidateSet with the contents loaded from a CSV file Use ValidateSet with the contents loaded from a CSV file powershell powershell

Use ValidateSet with the contents loaded from a CSV file


Here is something you can start with:

function New-Name {    param (        [parameter(Position=0, Mandatory=$true)]        [String]$Name    )    dynamicparam {        $attributes = new-object System.Management.Automation.ParameterAttribute        $attributes.ParameterSetName = "__AllParameterSets"        $attributes.Mandatory = $true        $attributeCollection = new-object -Type System.Collections.ObjectModel.Collection[System.Attribute]        $attributeCollection.Add($attributes)        $values = @('MailBox', 'Tralala', 'Trilili') # your Import-Csv here        $ValidateSet = new-object System.Management.Automation.ValidateSetAttribute($values)        $attributeCollection.Add($ValidateSet)        $dynParam1 = new-object -Type System.Management.Automation.RuntimeDefinedParameter("Type", [string], $attributeCollection)        $paramDictionary = new-object -Type System.Management.Automation.RuntimeDefinedParameterDictionary        $paramDictionary.Add("Type", $dynParam1)        return $paramDictionary     }     process { 'Foo' }}

Credits where credits are due, this largely comes from the following article from the Scripting Guy.The code isn't pretty, but it does what you want.

completion


I prefer TabExpansion++ module though this doesn't technically validate, it has some nice functionality...

Here's an example of an msbuild overloaded command to add some intellisense for projects

Register-ArgumentCompleter -CommandName "msbuild" -ParameterName "target" -ScriptBlock {    param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameter)    $projectName = $fakeBoundParameter['project']    $projectFile = Join-Path (Get-Location) $projectName    $projectXml = [xml](Get-Content $projectFile)    $targets = $projectXml.Project.Target | Where-Object { $_.Name.ToString().StartsWith($wordToComplete) }    foreach($target in $projectXml.Project.Target)    {        New-CompletionResult -CompletionText "$($target.Name)"    }}