【问题标题】:Unable to find type [System.Management.Automation.IValidateSetValuesGenerator] error in Powershell在 Powershell 中找不到类型 [System.Management.Automation.IValidateSetValuesGenerator] 错误
【发布时间】:2019-08-16 07:50:09
【问题描述】:

我遇到了一个问题,即使我检查了很多资源,我也无法解决。由于我不是 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

有什么想法吗?你介意把我引向正确的方向吗?

谢谢!

【问题讨论】:

    标签: powershell assemblies


    【解决方案1】:

    这仅在 ps6+ 中可用。这个页面...

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

    ... 说得很清楚。 [grin] 另外,当你选择 Windows Powershell 时,它会显示这个......

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

    【讨论】:

    • 真的很蹩脚:/ 以为我有最新的,结果 6 核是不同的。这是给人们的github.com/PowerShell/PowerShell/releases/tag/v6.1.3,谢谢李!
    • @verte - 不客气!请详细了解 ps6 和 winps5.1 是什么……它们并不是真正的“5.1 版升级到 ps6”。一个是稳定的,广泛支持 windows 的 windows 版本 ...另一个是新的,与 windows 服务器不太兼容 跨平台版本我>。 [咧嘴]
    • 这正是我目前正在弄清楚的。同时我想知道,如果我在说 PS 版本 2 或其他版本,是否可以提供动态 ValidateSet ?假设 PS(及其旧版本)会以不同的方式提供此类功能。
    • @verte - 我对此一无所知。 [blush] 我隐约了解了极少量的动态参数……您可能想问一个关于您想要什么的新问题。也许是超级用户?
    • 总之,无论如何,我遇到了另一个瓶颈。不过,非常感谢您的宝贵时间,非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2020-09-07
    • 2016-11-19
    • 2020-04-02
    • 1970-01-01
    • 1970-01-01
    • 2016-08-09
    • 1970-01-01
    • 2021-04-26
    相关资源
    最近更新 更多