Maybaygiare.org

Blog Network

uuden kohteen PSObject vs. PSCustomObject

uuden kohteen PSObject ja PSCustomObject käytön eroista on usein epäselvyyttä, samoin kuin näiden kahden toiminnasta.

kummalla tahansa lähestymistavalla voidaan ottaa arvojoukko PowerShell-objektien kokoelmasta ja koota ne yhdeksi tulosteeksi. Sekä, molemmat keinot tulostetaan tiedot Muistiotiedot järjestelmään.Hallinta.Automaatio.PSCustomObject-oliotyypit. Mitä väliä niillä on?

aluksi uuden objektin cmdlet esiteltiin PowerShell v1: ssä.0 ja on käynyt läpi useita muutoksia, kun taas PSCustomObject-luokan käyttö tuli myöhemmin v3.0: ssa. PowerShell v2.0: ta tai aikaisempaa käyttävissä järjestelmissä on käytettävä uutta objektia. Keskeinen ero 2.0-version ja 1.0-version välillä hallinnollisesta näkökulmasta on se, että 2.0 mahdollistaa hajautustaulujen käytön. Esimerkiksi:

$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
}

uuden objektin menetelmällä PowerShell v1.0: ssa sinun täytyy ilmoittaa objektityyppi, jonka haluat luoda, ja lisätä jäseniä kokoelmaan yksittäisissä komennoissa. Tämä kuitenkin muuttui v2: ssa.0, jolla voi käyttää hashtageja:

Uusi-objekti 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
}

tässä lähtö:

note theorder of output vs. order in the hash Table

tämä säästi paljon kirjoitettaessa ja tarjosi puhtaamman näköisen käsikirjoituksen. Kuitenkin, molemmat menetelmät on sama ongelma, että tuotos ei ole välttämättä samassa järjestyksessä kuin olet se lueteltu, joten jos etsit tiettyä muotoa, se ei välttämättä toimi. PSCustomObject korjasi tämän, kun se otettiin käyttöön v3.0: ssa, sekä tarjoaa enemmän virtaviivaistamista skripteissä.

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

huomaa ominaisuuksien järjestys

kuten on osoitettu, tulosteesi vastaa aina sitä, mitä olet määritellyt hashtablessa. PSCustomObject-sovelluksen käytön etuna on myös se, että sen on havaittu luetteloivan tiedot nopeammin kuin uuden kohteen vastine. PSCustomObject-projektissa on pidettävä mielessä vain se, että se ei toimi psv2.0-käyttöjärjestelmässä tai sitä aikaisemmissa järjestelmissä.

Vastaa

Sähköpostiosoitettasi ei julkaista.