gpt4 book ai didi

powershell - PowerShell OutputType属性不起作用

转载 作者:行者123 更新时间:2023-12-02 23:41:26 26 4
gpt4 key购买 nike

OutputType属性应该通过智能感知提供类型信息。但是,它不能按预期方式工作。

我已经在PSReadline和PowerShell ISE中对此进行了测试,它们的工作原理相同。

以下是我正在使用的示例函数:

Function Get-FirstChar
{
[OutputType([String])]
[CmdletBinding()]

param(
[Parameter(Mandatory=$true, ValueFromPipeline=$true)][string[]]$Strings
)

process {
foreach ($str in $Strings) {
$str.SubString(0, 1);
}
}
}

当我做:

"John","Simon" | Get-FirstChar | % { $_.<TAB> }

我得到了建议(无论平台如何):
Equals       GetHashCode  GetType      ToString

但是当我这样做时:
("John","Simon" | Get-FirstChar).<TAB>

然后我得到了所有字符串方法,例如 SubString等。

我也尝试将字符串数组 String[]作为输出类型,但仍然不起作用:(

有人会喜欢上如何使用 OutputType属性,说从Powershell函数返回一个或多个字符串吗?

谢谢

最佳答案

显然,您的期望是正确的。我必须说我很惊讶它不适用于[string],因为它确实适用于其他复杂类型:

function Get-ProcessEx {
[OutputType([System.Diagnostics.Process])]
param ()
}

Get-ProcessEx | ForEach-Object { $_.}

当我尝试使用 [string]时,我仅获得属性(这对字符串不是很有帮助,它们具有的唯一属性是 Length)。我认为,PowerShell ISE和PSReadline之类的工具对信息(从函数返回的对象是字符串)的响应存在错误或限制。例如。如果您对其他简单类型尝试相同的操作,结果将符合预期:
function Get-Int {
[OutputType([int])]
param ()
}

Get-Int | ForEach-Object { $_. }

它似乎也影响了cmdlet,我无法获得定义相同 OutputType来为字符串方法提供制表符完成功能的任何现有cmdlet:
Get-Command | Where-Object { $_.OutputType.Type -eq [String] }
# Join-Path, not too surprisingly, returns System.String...
Join-Path -Path C:\temp -ChildPath a.txt | ForEach-Object { $_.}

我想无论哪种情况都值得在 PowerShell's UserVoice.上进行报告

关于powershell - PowerShell OutputType属性不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41350128/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com