none
ValidateSet funktioniert nicht mit abstand in den strings RRS feed

  • Frage

  • hallo zusammen

    in mein ValidateSet habe ich div. Collection Name mit abstand und () wo nicht erkannt werden bei ausführen der Function.

    es erscheint die FM:

    Get-RDSUserTest : Cannot validate argument on parameter 'CollectionName'. The argument "Application" does not belong to the set "Application Servers,Office Applications,Servers (Collection A),Servers (Collection B)" specified by the ValidateSet attribute. Supply an argument that is in the set and then try the command again.
    At line:1 char:33
    + Get-RDSUserTest -CollectionName Application Servers
    +                                 ~~~~~~~~~~
        + CategoryInfo          : InvalidData: (:) [Get-RDSUserTest], ParameterBindingValidationException
        + FullyQualifiedErrorId : ParameterArgumentValidationError,Get-RDSUserTest

    Hier noch meine Function param Block.

    [CmdletBinding()]
    param(
    [Parameter(
        Mandatory=$True,Position=1,ValueFromPipeline=$True,ValueFromPipelineByPropertyName=$True,
        HelpMessage = "Enter a CollectionName")]
        [ValidateSet("Application Servers","Office Applications","Servers (Collection A)","Servers (Collection B)")]
        [string[]]$CollectionName,
        
        [Switch]$LoadRemoteDesktopModul
    )
    

    Was ich versucht habe die Collection Name mit doppelte Hochkomma ""Application Servers"" oder "'Application Servers'"

    Klappt leider auch nicht. Funktioniert ValidateSet überhaupt mit abstand im String? Wenn ja, wie muss ich vorgehen?

    Vielen Dank

    Grüsse

     

    Dienstag, 15. März 2016 14:44

Antworten

  • Hallo,

    dein Code funktioniert bei mir ohne Probleme, wenn ich die Namen auf meine Begebenheite anpasse.

    Was bei mir so nicht geht ist der Parameter ConnectionBroker dort hast du nur einen Hostnamen eingebene, geht bei mir nur mit Hostnamen nicht, sondern nur mit dem FQDN, aber das haengt natuerlich auch mit der ganzen Netzwerkstruktur zusammen.

    Beste Gruesse
    brima 

    • Als Antwort markiert Disco_G Mittwoch, 16. März 2016 15:39
    Mittwoch, 16. März 2016 12:09

Alle Antworten

  • Hallo,

    aus der Fehlermeldung entnehme ich dass du es mit Application Servers getestet hast, er aber nur Application genommen hat. Du musst beim Aufruf den ColletionNamen quoten wenn er Leerzeichen enthaelt usw., also

    -CollectionName 'Application Servers'

    Beste Gruesse
    brima

    function foo {
    	[CmdletBinding()]
    	param(
    	[Parameter(
    	    Mandatory=$True,Position=1,ValueFromPipeline=$True,ValueFromPipelineByPropertyName=$True,
    	    HelpMessage = "Enter a CollectionName")]
    	    [ValidateSet("Application Servers","Office Applications","Servers (Collection A)","Servers (Collection B)")]
    	    [string[]]$CollectionName,   
    	    [Switch]$LoadRemoteDesktopModul
    	)
    	$CollectionName
    }

    PS C:\> foo -CollectionName Application Servers
    foo : Cannot validate argument on parameter 'CollectionName'. The argument "Application" does not belong to the set "Ap
    plication Servers,Office Applications,Servers (Collection A),Servers (Collection B)" specified by the ValidateSet attri
    bute. Supply an argument that is in the set and then try the command again.
    At line:1 char:20
    + foo -CollectionName <<<<  Application Servers
        + CategoryInfo          : InvalidData: (:) [foo], ParameterBindingValidationException
        + FullyQualifiedErrorId : ParameterArgumentValidationError,foo

    -----

    PS C:\> foo -CollectionName 'Application Servers'
    Application Servers

    PS C:\> foo -CollectionName 'Servers (Collection A)'
    Servers (Collection A)

    • Bearbeitet brima Dienstag, 15. März 2016 15:19
    Dienstag, 15. März 2016 15:11
  • hallo brima

    das hatte ich auch versucht. erscheint die gleiche FM.

    gruss

    Dienstag, 15. März 2016 15:18
  • Also ich habe exakt deinen Code genommen in die Funktion FOO gepackt und es geht, siehe in meinem Post oben. (gerade eingefügt)

    Beste Gruesse
    brima

    Dienstag, 15. März 2016 15:21
  • das ich das richtig verstehe. die hochkomma werden von dir noch manuell hinzugefügt. stimmt das?

    was ich mache. Get-RDSUserTest -CollectionName dann wird ja mir vorgeschlagen welche collection das ich nehmen will.

     

    wenn ich jetzt die hochkomme manuell setzte erscheint die Meldung:

    Get-RDUserSession : Collection Application Servers does not exist.

    oder verstehe ich das falsch?

    gruss

    Dienstag, 15. März 2016 15:48
  • Hallo,

    also wenn Du in der ISE eine deiner Collection in der Liste auswählst wird die automatisch in '' gesetzt wenn Leerzeichen enthalten sind, ebenso im normalen Powershell Fenster wenn du die Liste mit TAB durchblaetterst.

    Also dass sollte in der Zeile stehen

    Get-RDSUserTest -CollectionName 'Application Servers' 
    bevor du ENTER drückst, wenn es dann zum Fehler kommt bitte nochmal die Meldung hier posten und am besten den gesamten Code, nicht das das Problem sonst wo schlummert.

    Beste Gruesse
    brima 


    • Bearbeitet brima Dienstag, 15. März 2016 18:46
    Dienstag, 15. März 2016 18:41
  • guten morgen brima

    interessant. bei mir werden die " nicht automatisch gesetzt. und bei ausführen kommt natürlich wieder die FM wo ich gepostet habe. keine ahnung was gestern los war aber beim manuellen setzen der " hat es auch nicht geklappt. habe es soeben wieder versucht und jetzt klappt es. aber die Idee war das ich die collection auswähle und nicht noch manuell " setzen muss.

    evtl. mache ich etwas falsch im code.

    function Get-RDSUserTest{
    
    [CmdletBinding()]
    param(
    [Parameter(
        Mandatory=$True,Position=1,ValueFromPipeline=$True,ValueFromPipelineByPropertyName=$True,
        HelpMessage = "Enter a CollectionName")]
        [ValidateSet('Application Servers','Remote Office Applications','Servers (Collection A)','Servers (Collection B)')]
        [string[]]$CollectionName,
        
        [Switch]$LoadRemoteDesktopModul
    )
    
    BEGIN 
    {
        if($LoadRemoteDesktopModul)
        {
            Write-Host -ForegroundColor Green "Loading RemoteDesktop Module"
            Import-Module RemoteDesktop
        }
    } 
    Process
    {
        Write-Output "Starting PROCESS block"
        $loggedonusers = Get-RDUserSession -ConnectionBroker "rds-cb1" -CollectionName $CollectionName | Sort-Object SessionState
    
        foreach($user in $loggedonusers)
        {
    
            $properties = [ordered]@{
            User = $($user.username)
            HostServer = $($user.HostServer)
            SessionState = $($user.SessionState)
            ID = $($user.UnifiedSessionId)
            }
                $obj = New-Object -TypeName PsObject -Property $properties
                Write-Output $obj
        }
    }
    
    End{}
    }
    

    vielen dank für deine hilfe und grüsse

    Mittwoch, 16. März 2016 08:21
  • Hallo,

    dein Code funktioniert bei mir ohne Probleme, wenn ich die Namen auf meine Begebenheite anpasse.

    Was bei mir so nicht geht ist der Parameter ConnectionBroker dort hast du nur einen Hostnamen eingebene, geht bei mir nur mit Hostnamen nicht, sondern nur mit dem FQDN, aber das haengt natuerlich auch mit der ganzen Netzwerkstruktur zusammen.

    Beste Gruesse
    brima 

    • Als Antwort markiert Disco_G Mittwoch, 16. März 2016 15:39
    Mittwoch, 16. März 2016 12:09
  • interessant, bei mir klappt es leider nicht. ich werde die " manuell setzten. vielen dank für deine hilfe.

    grusse

    Mittwoch, 16. März 2016 15:39