在Powershell中找不到类型[System.Management.Automation.IValidateSetValuesGenerator]错误

时间:2019-03-26 01:11:53

标签: powershell assemblies

我遇到了一个问题,即使我检查了很多资源也无法解决。由于我不是Windows开发人员,而且对powershell的了解很少,因此我可能错过了非常重要的一步。

这是我的PS版本表。

Name                           Value                                                                                                      
----                           -----                                                                                                      
PSVersion                      5.1.14409.1018                                                                                             
PSEdition                      Desktop                                                                                                    
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}                                                                                    
BuildVersion                   10.0.14409.1018                                                                                            
CLRVersion                     4.0.30319.42000                                                                                            
WSManStackVersion              3.0                                                                                                        
PSRemotingProtocolVersion      2.3                                                                                                        
SerializationVersion           1.1.0.1  

我想为函数的标志之一添加动态填充的值数组(例如bash中的COMPREPLY)。

我根据在线检查的来源编写了以下示例。

class GetProfiles : System.Management.Automation.IValidateSetValuesGenerator
{
    [String[]] GetValidValues()
    {
        $Paths = "D:\Profiles"
        $Profiles = ForEach ($Path in $Paths)
        {
            if (Test-Path $Path)
            {
                (Get-ChildItem $Path).BaseName
            }
        }
        return [string[]] $Profiles
    }
}

function global:Activate()
{
    [CmdletBinding()]
    Param
    (
        [ValidateSet([GetProfiles])]
        [string]$Profile="",
    )

    Write-Host $Profile
}

但是我的代码会产生此错误。

At D:\projects\activate.ps1:40 char:20 + ... SoundNames : System.Management.Automation.IValidateSetValuesGenerator + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Unable to find type [System.Management.Automation.IValidateSetValuesGenerator]. + CategoryInfo : ParserError: (:) [], ParseException + FullyQualifiedErrorId : TypeNotFound

我有以下dll,我尝试用Add-Type -Path将其添加到脚本的顶部,但无效:/。

C:\Windows\Microsoft.NET\assembly\GAC_MSIL\System.Management.Automation\v4.0_3.0.0.0__31bf3856ad364e35\System.Management.Automation.dll

有什么想法吗?您介意将我带往正确的方向吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

仅在ps6 +中可用。此页面...

IValidateSetValuesGenerator接口(System.Management.Automation)| Microsoft文档
https://docs.microsoft.com/en-us/dotnet/api/system.management.automation.ivalidatesetvaluesgenerator?view=pscore-6.0.0

...这很清楚。 [咧嘴]另外,当您选择Windows Powershell时,它会显示此...

  

请求的页面不适用于Windows PowerShell SDK 1.1.0。您已重定向到此页面可用的最新产品版本。