Maybaygiare.org

Blog Network

New-Object PSObject vs. PSCustomObject

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 $Path
ForEach ($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 $Path
ForEach ($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:

Nota theorder de saída versus a ordem na tabela de hash

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 $Path
ForEach ($Dir in $Directory.Access){
@{
Path = $Path
Owner = $Directory.Owner
Group = $Dir.IdentityReference
AccessType = $Dir.AccessControlType
Rights = $Dir.FileSystemRights
}#EndPSCustomObject
}#EndForEach

Note que a ordem das propriedades

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.

Deixe uma resposta

O seu endereço de email não será publicado.