我遇到了一个问题,即使我检查了很多资源也无法解决。由于我不是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
有什么想法吗?您介意将我带往正确的方向吗?
谢谢!
答案 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。您已重定向到此页面可用的最新产品版本。