是否可以在Powershell中重命名类型成员名称?
使用PowerShell,是否可以获取一组数据,放入表中,然后将名称应用于标题 问题是,我有一个异步操作,它从远程网络位置获取一些数据,有时头信息会首先返回,这使得在我填充的表上设置头非常容易,但有时这种情况不会发生。我希望能够在查找标题时首先收集数据,然后在收集完所有数据后再进行设置 我不希望遍历表中的每个对象,因为可能会有数百行数据返回。我还试图确保它足够通用,可以处理任意数量的标题和数据列(当然,列的数量总是与标题的数量匹配)是否可以在Powershell中重命名类型成员名称?,powershell,Powershell,使用PowerShell,是否可以获取一组数据,放入表中,然后将名称应用于标题 问题是,我有一个异步操作,它从远程网络位置获取一些数据,有时头信息会首先返回,这使得在我填充的表上设置头非常容易,但有时这种情况不会发生。我希望能够在查找标题时首先收集数据,然后在收集完所有数据后再进行设置 我不希望遍历表中的每个对象,因为可能会有数百行数据返回。我还试图确保它足够通用,可以处理任意数量的标题和数据列(当然,列的数量总是与标题的数量匹配) 有没有办法重命名[pscustomeobject]的属性?如果
有没有办法重命名
[pscustomeobject]
的属性?如果标题不是第一位的话,我不认为您可以避免对数据进行一些迭代,除非您愿意让数据的下游使用者对对象的“形状”进行排序
为此,我假设一次远程调用的所有对象都具有相同的结构,并且结构是平面的
当header通过时,将header名称保存在一个单独的变量中到数据中。例如,在一个数组中-类似于以下内容:
$header = @()
$data = @()
# assuming variable $remoteObject which is a psobject
If ($remoteObjIsHeader) {
$remoteObject | Get-Member -MemberType Properties | % {
$header += $_.Name
}
}
else {
$data += $remoteObject
}
一旦你有了所有的头,你就可以开始用这样的函数推出你的新PSObject了
Function Write-DataBuffer($Headers, $Data) {
foreach($item in $Data) {
$obj = New-Object -TypeName psobject
for ($i =0; $i -lt $Headers.length; $i++) {
$obj | Add-Member -MemberType NoteProperty -Name $Headers[$i] -Value $item[$i]
}
Write-Output $obj
}
}
您可以使用fancier并缓冲$data
中的内容,直到报头到达,然后您只需在报头到达之前循环接收的行数。但是你说这是异步的,所以我不确定线程的含义
If ($remoteObjIsHeader) {
$remoteObject | Get-Member -MemberType Properties | % {
$header += $_.Name
}
if ($data.length -gt 0) {
# header arrived after data - flush the buffer
Write-DataBuffer -Data $data
}
}
else {
if ($headers.length -gt 0) {
# have the headers just output the data
Write-DataBuffer -Data @($remoteObject)
}
else {
# don't have headers - buffer the data
$data += $remoteObject
}
}