há muitas vezes alguma confusão em relação às diferenças entre o uso de novo objeto PSObject e PSCustomObject, bem como como como os dois funcionam.
qualquer abordagem pode ser usada para tomar um conjunto de valores de uma coleção de objetos PowerShell e colmatá-los em uma única saída. As well, both avenues will output the data as NoteProperties in the System.Gestao.Automacao.Tipos de objectos PSCustomObject. Qual é o problema entre eles?
para começar, o cmdlet de novo objeto foi introduzido em PowerShell v1.0 e passou por uma série de mudanças, enquanto o uso da classe PSCustomObject veio mais tarde em v3.0. Para sistemas que utilizam PowerShell v2.0 ou anteriores, o novo objeto deve ser usado. A principal diferença entre a versão 2.0 e 1.0 do ponto de vista administrativo é que o 2.0 permite o uso de tabelas de hash. Por exemplo:
$Path = "c:\scripts"$Directory = Get-Acl -Path $PathForEach ($Dir in $Directory.Access){$DirPermissions = New-Object -TypeName PSObject$DirPermissions | Add-Member -MemberType NoteProperty -Name Path -Value $Path$DirPermissions | Add-Member -MemberType NoteProperty -Name Owner -Value $Directory.Owner$DirPermissions | Add-Member -MemberType NoteProperty -Name Group -Value $Dir.IdentityReference$DirPermissions | Add-Member -MemberType NoteProperty -Name AccessType -Value $Dir.AccessControlType$DirPermissions | Add-Member -MemberType NoteProperty -Name Rights -Value $Dir.FileSystemRights$DirPermissions}
com o método do novo objecto em PowerShell v1.0, terá de declarar o tipo de objecto que deseja criar e Adicionar Membros à colecção em comandos individuais. Isso mudou no entanto em v2.0 com a capacidade de utilizar tabelas de hash:
New-Object no PS 2.0
$Path = "c:\scripts"$Directory = Get-Acl -Path $PathForEach ($Dir in $Directory.Access){$DirPermissions = New-Object -TypeName PSObject -Property @{'Path' = $Path'Owner' = $Directory.Owner'Group' = $Dir.IdentityReference'AccessType' = $Dir.AccessControlType'Rights' = $Dir.FileSystemRights}$DirPermissions}
Aqui está o resultado:
Isso salvou um monte de sobrecarga na digitação e fornecido um produto de limpeza à procura de script. No entanto, ambos os métodos têm o mesmo problema em que a saída não está necessariamente na mesma ordem que você tem listado, então se você está procurando por um formato particular, ele pode não funcionar. O PSCustomObject corrigiu isso quando foi introduzido no v3. 0, juntamente com o fornecimento de mais racionalização em seus scripts.
PSCustomObject in PowerShell v3.0
$Path = "c:\scripts"$Directory = Get-Acl -Path $PathForEach ($Dir in $Directory.Access){@{Path = $PathOwner = $Directory.OwnerGroup = $Dir.IdentityReferenceAccessType = $Dir.AccessControlTypeRights = $Dir.FileSystemRights}#EndPSCustomObject}#EndForEach
Como demonstrado, a saída será sempre correspondem ao que você tenha definido no seu hashtable. Outra vantagem de usar o PSCustomObject é que tem sido observado enumerar os dados mais rápido do que sua contraparte de novo objeto. A única coisa a ter em mente com o PSCustomObject é que ele não vai funcionar com sistemas rodando PSv2.0 ou mais cedo.