Maybaygiare.org

Blog Network

nyt objekt PSObject vs. PSCustomObject

der er ofte en vis forvirring med hensyn til forskellene mellem at bruge nyt objekt PSObject og PSCustomObject, samt hvordan de to fungerer.

enten tilgang kan bruges til at tage et sæt af værdier fra en samling af Magtshell objekter og samle dem i en enkelt udgang. Såvel, begge veje udsender dataene som Noteegenskaber i systemet.Forvaltning.Automation.Pscustomobject objekttyper. Så hvad er big deal mellem dem?

til at begynde med blev cmdlet med nyt objekt introduceret i Kraftshell v1.0 og har gennemgået en række ændringer, mens brugen af pscustomobject-klassen kom senere i v3.0. For systemer, der bruger Strømshell v2.0 eller tidligere, skal der bruges nyt objekt. Nøgleforskellen mellem 2.0-versionen og 1.0-versionen fra et administrativt synspunkt er, at 2.0 tillader brug af hash-tabeller. For eksempel:

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

Med den nye Objektmetode i Kraftshell v1.0 skal du erklære den objekttype, du vil oprette, og tilføje medlemmer til samlingen i individuelle kommandoer. Dette ændrede sig dog i v2.0 med evnen til at bruge hashtables:

nyt-objekt i 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
}

Her er output:

Bemærk theorder of output vs. order in the Hash Table

dette gemte en masse overhead i at skrive og forudsat et renere udseende script. Begge metoder har dog det samme problem, idet output ikke nødvendigvis er i samme rækkefølge, som du har angivet det, så hvis du leder efter et bestemt format, fungerer det muligvis ikke. PSCustomObject Fast dette, da det blev indført i v3.0, sammen med at give mere strømlining i dine scripts.

PSCustomObject i Kraftshell 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

Bemærk rækkefølgen af egenskaberne

som vist vil din output altid matche det, du har defineret i din hashtable. En anden fordel ved at bruge PSCustomObject er, at det er blevet bemærket at opregne dataene hurtigere end dets nye objekt-modstykke. Den eneste ting at huske på med PSCustomObject er, at det ikke fungerer med systemer, der kører PSv2.0 eller tidligere.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.