Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以在Powershell中重命名类型成员名称?_Powershell - Fatal编程技术网

是否可以在Powershell中重命名类型成员名称?

是否可以在Powershell中重命名类型成员名称?,powershell,Powershell,使用PowerShell,是否可以获取一组数据,放入表中,然后将名称应用于标题 问题是,我有一个异步操作,它从远程网络位置获取一些数据,有时头信息会首先返回,这使得在我填充的表上设置头非常容易,但有时这种情况不会发生。我希望能够在查找标题时首先收集数据,然后在收集完所有数据后再进行设置 我不希望遍历表中的每个对象,因为可能会有数百行数据返回。我还试图确保它足够通用,可以处理任意数量的标题和数据列(当然,列的数量总是与标题的数量匹配) 有没有办法重命名[pscustomeobject]的属性?如果

使用PowerShell,是否可以获取一组数据,放入表中,然后将名称应用于标题

问题是,我有一个异步操作,它从远程网络位置获取一些数据,有时头信息会首先返回,这使得在我填充的表上设置头非常容易,但有时这种情况不会发生。我希望能够在查找标题时首先收集数据,然后在收集完所有数据后再进行设置

我不希望遍历表中的每个对象,因为可能会有数百行数据返回。我还试图确保它足够通用,可以处理任意数量的标题和数据列(当然,列的数量总是与标题的数量匹配)


有没有办法重命名
[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
  }
}