Om att skapa objektAbout Object Creation

Kort beskrivningShort description

Förklarar hur du skapar objekt i PowerShell.Explains how to create objects in PowerShell.

Lång beskrivningLong description

Du kan skapa objekt i PowerShell och använda de objekt som du skapar i kommandon och skript.You can create objects in PowerShell and use the objects that you create in commands and scripts.

Det finns många sätt att skapa objekt, den här listan är inte slutgiltig:There are many ways to create objects, this list is not definitive:

  • New-Object: skapar en instans av ett .NET Framework-objekt eller com-objekt.New-Object: Creates an instance of a .NET Framework object or COM object.
  • Importera – CSV / ConvertFrom-CSV: skapar anpassade objekt ( PSCustomObject ) från objekt som definieras som kommaavgränsade värden.Import-Csv/ ConvertFrom-CSV: Creates custom objects ( PSCustomObject ) from the items defined as comma separated values.
  • ConvertFrom-JSON: skapar anpassade objekt som definieras i JavaScript Object Notation (JSON).ConvertFrom-Json: Creates custom objects defined in JavaScript Object Notation (JSON).
  • ConvertFrom-StringData: skapar anpassade objekt som definieras som nyckel värdes par.ConvertFrom-StringData: Creates custom objects defined as key value pairs.
  • Tilläggs typ: gör att du kan definiera en klass i din PowerShell-session som du kan instansiera med New-Object .Add-Type: Allows you to define a class in your PowerShell session that you can instantiate with New-Object.
  • Ny modul: parametern AsCustomObject skapar ett anpassat objekt som du definierar med hjälp av skript block.New-Module: The AsCustomObject parameter creates a custom object you define using script block.
  • Lägg till medlem: lägger till egenskaper i befintliga objekt.Add-Member: Adds properties to existing objects. Du kan använda Add-Member för att skapa ett anpassat objekt av en enkel typ, t [System.Int32] . ex..You can use Add-Member to create a custom object out of a simple type, like [System.Int32].
  • Select-Object: väljer Egenskaper för ett objekt.Select-Object: Selects properties on an object. Du kan använda Select-Object för att skapa anpassade och beräknade egenskaper för ett redan instansierat objekt.You can use Select-Object to create custom and calculated properties on an already instantiated object.

Följande ytterligare metoder beskrivs i den här artikeln:The following additional methods are covered in this article:

  • Genom att anropa en bastyps konstruktor med en statisk new() metodBy calling a type's constructor using a static new() method
  • Av Typecasting hash-tabeller för egenskaps namn och egenskaps värdenBy typecasting hash tables of property names and property values

Statisk ny ()-metodStatic new() method

Alla .NET-typer har en new() metod som gör att du enkelt kan skapa instanser.All .NET types have a new() method that allows you to construct instances more easily. Du kan också se alla tillgängliga konstruktorer för en specifik typ.You can also see all the available constructors for a given type.

Om du vill se konstruktörer för en typ anger du new metod namnet efter typ namnet och trycker på <ENTER> .To see the constructors for a type, specify the new method name after the type name and press <ENTER>.

[System.Uri]::new
OverloadDefinitions
-------------------
uri new(string uriString)
uri new(string uriString, bool dontEscape)
uri new(uri baseUri, string relativeUri, bool dontEscape)
uri new(string uriString, System.UriKind uriKind)
uri new(uri baseUri, string relativeUri)
uri new(uri baseUri, uri relativeUri)

Nu kan du skapa en system. URI genom att ange lämplig konstruktor.Now, you can create a System.Uri by specifying the appropriate constructor.

[System.Uri]::new("https://www.bing.com")
AbsolutePath   : /
AbsoluteUri    : https://www.bing.com/
LocalPath      : /
Authority      : www.bing.com
...

Du kan använda följande exempel för att avgöra vilka .NET-typer som för närvarande läses in för att skapa en instans.You can use the following sample to determine what .NET types are currently loaded for you to instantiate.

[AppDomain]::CurrentDomain.GetAssemblies() |
  ForEach-Object {
    $_.GetExportedTypes() |
      ForEach-Object { $_.FullName }
  }

Objekt som har skapats med new() metoden kanske inte har samma egenskaper som objekt av samma typ som skapas av PowerShell-cmdletar.Objects created using the new() method may not have the same properties as objects of the same type that are created by PowerShell cmdlets. PowerShell-cmdletar, providers och utökat typ system kan lägga till extra egenskaper till instansen.PowerShell cmdlets, providers, and Extended Type System can add extra properties to the instance.

Till exempel lägger fil Systems leverantören i PowerShell sex NoteProperty -värden till DirectoryInfo -objektet som returnerades av Get-Item .For example, the FileSystem provider in PowerShell adds six NoteProperty values to the DirectoryInfo object returned by Get-Item.

$PSDirInfo = Get-Item /
$PSDirInfo | Get-Member | Group-Object MemberType | Select-Object Count, Name
Count Name
----- ----
    4 CodeProperty
   13 Property
    6 NoteProperty
    1 ScriptProperty
   18 Method

När du skapar ett DirectoryInfo -objekt direkt har det inte dessa sex NoteProperty -värden.When you create a DirectoryInfo object directly, it does not have those six NoteProperty values.

$NewDirInfo = [System.IO.DirectoryInfo]::new('/')
$NewDirInfo | Get-Member | Group-Object MemberType | Select-Object Count, Name
Count Name
----- ----
    4 CodeProperty
   13 Property
    1 ScriptProperty
   18 Method

Mer information om det utökade typ systemet finns i about_Types.ps1XML.For more information about the Extended Type System, see about_Types.ps1xml.

Den här funktionen lades till i PowerShell 5,0This feature was added in PowerShell 5.0

Skapa objekt från hash-tabellerCreate objects from hash tables

Du kan skapa ett objekt från en hash-tabell med egenskaper och egenskaps värden.You can create an object from a hash table of properties and property values.

Syntaxen ser ut så här:The syntax is as follows:

[<class-name>]@{
  <property-name>=<property-value>
  <property-name>=<property-value>
}

Den här metoden fungerar bara för klasser som har en parameter lös konstruktor.This method works only for classes that have a parameterless constructor. Objekt egenskaperna måste vara offentliga och kan anges.The object properties must be public and settable.

Den här funktionen har lagts till i PowerShell version 3,0This feature was added in PowerShell version 3.0

Skapa anpassade objekt från hash-tabellerCreate custom objects from hash tables

Anpassade objekt är mycket användbara och är enkla att skapa med hjälp av hash-tabell metoden.Custom objects are very useful and are easy to create using the hash table method. PSCustomObject -klassen har utformats särskilt för detta ändamål.The PSCustomObject class is designed specifically for this purpose.

Anpassade objekt är ett utmärkt sätt att returnera anpassade utdata från en funktion eller ett skript.Custom objects are an excellent way to return customized output from a function or script. Detta är mer användbart än att returnera formaterade utdata som inte kan formateras om eller skickas till andra kommandon.This is more useful than returning formatted output that cannot be reformatted or piped to other commands.

Kommandona i Test-Object function anger några variabel värden och använder sedan dessa värden för att skapa ett anpassat objekt.The commands in the Test-Object function set some variable values and then use those values to create a custom object. Du kan se att det här objektet används i avsnittet exempel i Update-Help Hjälp avsnittet för cmdleten.You can see this object in use in the example section of the Update-Help cmdlet help topic.

function Test-Object {
  $ModuleName = "PSScheduledJob"
  $HelpCulture = "en-us"
  $HelpVersion = "3.1.0.0"
  [PSCustomObject]@{
    "ModuleName"=$ModuleName
    "UICulture"=$HelpCulture
    "Version"=$HelpVersion
  }
  $ModuleName = "PSWorkflow"
  $HelpCulture = "en-us"
  $HelpVersion = "3.0.0.0"
  [PSCustomObject]@{
    "ModuleName"=$ModuleName
    "UICulture"=$HelpCulture
    "Version"=$HelpVersion
  }
}
Test-Object

Resultatet av den här funktionen är en samling anpassade objekt som är formaterade som en tabell som standard.The output of this function is a collection of custom objects formatted as a table by default.

ModuleName        UICulture      Version
---------         ---------      -------
PSScheduledJob    en-us          3.1.0.0
PSWorkflow        en-us          3.0.0.0

Användare kan hantera egenskaperna för de anpassade objekten precis som med standard objekt.Users can manage the properties of the custom objects just as they do with standard objects.

(Test-Object).ModuleName
 PSScheduledJob
 PSWorkflow

Skapa icke-anpassade objekt från hash-tabellerCreate non-custom objects from hash tables

Du kan också använda hash-tabeller för att skapa objekt för klasser som inte är anpassade.You can also use hash tables to create objects for non-custom classes. När du skapar ett objekt för en icke-anpassad klass, krävs namn områdets kvalificerade typ, men du kan utesluta eventuella initiala system namns komponenter.When you create an object for a non-custom class, the namespace-qualified type name is required, although you may omit any initial System namespace component.

Till exempel skapar följande kommando ett alternativ för Session-objektet.For example, the following command creates a session option object.

[System.Management.Automation.Remoting.PSSessionOption]@{
  IdleTimeout=43200000
  SkipCnCheck=$True
}

Kraven för hash-tabellens funktion, särskilt parameter lösa krav för konstruktorn, eliminerar många befintliga klasser.The requirements of the hash table feature, especially the parameterless constructor requirement, eliminate many existing classes. De flesta PowerShell-alternativklasser är dock utformade för att fungera med den här funktionen, samt andra mycket användbara klasser, t. ex. klassen ProcessStartInfo .However, most PowerShell option classes are designed to work with this feature, as well as other very useful classes, such as the ProcessStartInfo class.

[System.Diagnostics.ProcessStartInfo]@{
  CreateNoWindow="$true"
  Verb="run as"
}
Arguments               :
ArgumentList            : {}
CreateNoWindow          : True
EnvironmentVariables    : {OneDriveConsumer, PROCESSOR_ARCHITECTURE,
                           CommonProgramFiles(x86), APPDATA...}
Environment             : {[OneDriveConsumer, C:\Users\user1\OneDrive],
                           [PROCESSOR_ARCHITECTURE, AMD64],
                           [CommonProgramFiles(x86),
                           C:\Program Files (x86)\Common Files],
                           [APPDATA, C:\Users\user1\AppData\Roaming]...}
RedirectStandardInput   : False
RedirectStandardOutput  : False
RedirectStandardError   : False
...

Du kan också använda funktionen hash-tabell när du anger parameter värden.You can also use the hash table feature when setting parameter values. Till exempel värdet för parametern SessionOption för New-PSSession .For example, the value of the SessionOption parameter of the New-PSSession. cmdleten kan vara en hash-tabell.cmdlet can be a hash table.

New-PSSession -ComputerName Server01 -SessionOption @{
  IdleTimeout=43200000
  SkipCnCheck=$True
}
Register-ScheduledJob Name Test -FilePath .\Get-Inventory.ps1 -Trigger @{
  Frequency="Daily"
  At="15:00"
}

Allmänna objektGeneric objects

Du kan också skapa generiska objekt i PowerShell.You can also create generic objects in PowerShell. Generiska klasser är klasser, strukturer, gränssnitt och metoder som har plats hållare (typ parametrar) för en eller flera av de typer som de lagrar eller använder.Generics are classes, structures, interfaces, and methods that have placeholders (type parameters) for one or more of the types that they store or use.

I följande exempel skapas ett Dictionary -objekt.The following example creates a Dictionary object.

$dict = New-Object 'System.Collections.Generic.Dictionary[String,Int]'
$dict.Add("One", 1)
$dict
Key Value
--- -----
One     1

Mer information om generiska finns i generiska i .net.For more information on Generics, see Generics in .NET.

Se ävenSee also

about_Objectsabout_Objects

about_Methodsabout_Methods

about_Propertiesabout_Properties

about_Pipelinesabout_Pipelines

about_Types.ps1XMLabout_Types.ps1xml