gpt4 book ai didi

powershell - 将 Powershell 对象的类型名称从 PSCustomObject 更改为我选择的名称?

转载 作者:行者123 更新时间:2023-12-02 22:15:03 24 4
gpt4 key购买 nike

我有一个使用自定义对象的脚本。我用这样的伪构造函数创建它们:

function New-TestResult 
{
$trProps = @{
name = "";
repo = @{};

vcs = $Skipped;

clean = New-StageResult; # This is another pseudo-constructor
build = New-StageResult; # for another custom object.
test = New-StageResult; # - Micah

start = get-date;
finish = get-date;
}

$testResult = New-Object PSObject -Property $trProps
return $testResult
}

这些很有用,因为它们可以传递给类似 ConvertTo-Csv 的东西。或 ConvertTo-Html (与哈希表不同,否则会实现我的目标)。它们的类型为 PSCustomObject对象。这段代码:
$tr = new-testresult
$tr.gettype()

返回这个:
IsPublic IsSerial Name                     BaseType
-------- -------- ---- --------
True False PSCustomObject System.Object

我可以更改 NamePSCustomObject 返回的字段到别的东西?

稍后当我整理测试结果时,我将传递给另一个函数,有时是单个结果,有时是结果数组。我需要能够做一些不同的事情,这取决于我得到的那些。

任何帮助表示赞赏。

最佳答案

当然,在创建 $testResult 后试试这个:

$testResult.psobject.TypeNames.Insert(0, "MyType")

PowerShell 扩展类型系统的核心是 psobject 包装器(至少在 V1 和 V2 中)。此包装器允许您添加属性和方法、修改类型名称列表并获取底层 .NET 对象,例如:
C:\PS > $obj = new-object psobject
C:\PS > $obj.psobject


BaseObject :
Members : {string ToString(), bool Equals(System.Object obj), int GetHashCode(), type GetType()}
Properties : {}
Methods : {string ToString(), bool Equals(System.Object obj), int GetHashCode(), type GetType()}
ImmediateBaseObject :
TypeNames : {System.Management.Automation.PSCustomObject, System.Object}

或从提示中尝试此操作:
C:\PS> $d = [DateTime]::Now
C:\PS> $d.psobject
...

关于powershell - 将 Powershell 对象的类型名称从 PSCustomObject 更改为我选择的名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12682631/

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