수색…


객체 업데이트

속성 추가하기

기존 개체에 속성을 추가하려면 Add-Member cmdlet을 사용하면됩니다. PSObject를 사용하면 값이 "메모 속성"유형으로 유지됩니다.

$object = New-Object -TypeName PSObject -Property @{
        Name = $env:username
        ID = 12
        Address = $null
    }

Add-Member -InputObject $object -Name "SomeNewProp" -Value "A value" -MemberType NoteProperty

# Returns
PS> $Object
Name ID Address SomeNewProp
---- -- ------- -----------
nem  12         A value

Select-Object Cmdlet (계산 된 속성이라고도 함)을 사용하여 속성을 추가 할 수도 있습니다.

$newObject = $Object | Select-Object *, @{label='SomeOtherProp'; expression={'Another value'}}

# Returns
PS> $newObject
Name ID Address SomeNewProp SomeOtherProp
---- -- ------- ----------- -------------
nem  12         A value     Another value

위의 명령은 다음과 같이 짧을 수 있습니다.

$newObject = $Object | Select *,@{l='SomeOtherProp';e={'Another value'}}

속성 제거하기

Select-Object Cmdlet을 사용하여 개체에서 속성을 제거 할 수 있습니다.

$object = $newObject | Select-Object * -ExcludeProperty ID, Address

# Returns
PS> $object
Name SomeNewProp SomeOtherProp
---- ----------- -------------
nem  A value     Another value

새 객체 만들기

PowerShell은 다른 스크립팅 언어와 달리 파이프 라인을 통해 개체를 보냅니다. 이것이 의미하는 바는 한 명령에서 다른 명령으로 데이터를 전송할 때 개체를 생성, 수정 및 수집 할 수 있어야한다는 것입니다.

객체를 만드는 것은 간단합니다. 사용자가 만드는 대부분의 개체는 PowerShell에서 사용자 지정 개체가되며 해당 개체에 사용할 형식은 PSObject입니다. 또한 PowerShell을 사용하면 .NET에서 만들 수있는 모든 개체를 만들 수 있습니다.

다음은 몇 가지 속성으로 새 객체를 만드는 예제입니다.

옵션 1 : 새 개체

$newObject = New-Object -TypeName PSObject -Property @{
    Name = $env:username
    ID = 12
    Address = $null
}

# Returns
PS> $newObject
Name ID Address
---- -- -------
nem  12

다음과 같이 명령 앞에 $newObject =

개체 모음을 저장해야 할 수도 있습니다. 이것은 빈 콜렉션 변수를 생성하고 콜렉션에 오브젝트를 추가함으로써 가능합니다 :

$newCollection = @()
$newCollection += New-Object -TypeName PSObject -Property @{
    Name = $env:username
    ID = 12
    Address = $null
}

그런 다음이 컬렉션 객체를 객체별로 반복 할 수 있습니다. 이렇게하려면 설명서에서 루프 섹션을 찾으십시오.

옵션 2 : 개체 선택

인터넷에서 여전히 찾을 수있는 객체를 만드는 일반적인 방법은 다음과 같습니다.

$newObject = 'unuseddummy' | Select-Object -Property Name, ID, Address
$newObject.Name = $env:username
$newObject.ID = 12

# Returns
PS> $newObject
Name ID Address
---- -- -------
nem  12

옵션 3 : pscustomobject 유형 가속기 (PSv3 + 필요)

정렬 된 형식 가속기는 PowerShell이 ​​우리가 정의한 순서대로 속성을 유지하도록합니다. [PSCustomObject] 를 사용하기 위해 정렬 된 유형 액셀러레이터가 필요하지 않습니다.

$newObject = [PSCustomObject][Ordered]@{
    Name = $env:Username
    ID = 12
    Address = $null
}

# Returns
PS> $newObject
Name ID Address
---- -- -------
nem  12

객체 검사하기

객체가 생기면 그 객체가 무엇인지 파악하는 것이 좋습니다. Get-Member cmdlet을 사용하여 개체의 개념과 개체의 개념을 확인할 수 있습니다.

Get-Item c:\windows | Get-Member

결과는 다음과 같습니다.

TypeName: System.IO.DirectoryInfo

객체의 속성 및 메서드 목록이 뒤에옵니다.

객체의 유형을 얻는 또 다른 방법은 다음과 같이 GetType 메소드를 사용하는 것입니다.

C:\> $Object = Get-Item C:\Windows
C:\> $Object.GetType()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     DirectoryInfo                            System.IO.FileSystemInfo

개체의 속성 목록을 보려면 해당 값과 함께 Format-List cmdlet을 사용하여 해당 Property 매개 변수를 * (모든 것을 의미)로 설정합니다.

결과는 다음과 같습니다.

C:\> Get-Item C:\Windows | Format-List -Property *


PSPath            : Microsoft.PowerShell.Core\FileSystem::C:\Windows
PSParentPath      : Microsoft.PowerShell.Core\FileSystem::C:\
PSChildName       : Windows
PSDrive           : C
PSProvider        : Microsoft.PowerShell.Core\FileSystem
PSIsContainer     : True
Mode              : d-----
BaseName          : Windows
Target            : {}
LinkType          :
Name              : Windows
Parent            :
Exists            : True
Root              : C:\
FullName          : C:\Windows
Extension         :
CreationTime      : 30/10/2015 06:28:30
CreationTimeUtc   : 30/10/2015 06:28:30
LastAccessTime    : 16/08/2016 17:32:04
LastAccessTimeUtc : 16/08/2016 16:32:04
LastWriteTime     : 16/08/2016 17:32:04
LastWriteTimeUtc  : 16/08/2016 16:32:04
Attributes        : Directory

일반 클래스의 인스턴스 생성

참고 : PowerShell 5.1 용으로 작성된 예제 일반 클래스의 인스턴스를 만들 수 있습니다

#Nullable System.DateTime
[Nullable[datetime]]$nullableDate = Get-Date -Year 2012
$nullableDate
$nullableDate.GetType().FullName
$nullableDate = $null
$nullableDate

#Normal System.DateTime
[datetime]$aDate = Get-Date -Year 2013
$aDate
$aDate.GetType().FullName
$aDate = $null #Throws exception when PowerShell attempts to convert null to 

출력 결과를 표시합니다.

Saturday, 4 August 2012 08:53:02
System.DateTime
Sunday, 4 August 2013 08:53:02
System.DateTime
Cannot convert null to type "System.DateTime".
At line:14 char:1
+ $aDate = $null
+ ~~~~~~~~~~~~~~
    + CategoryInfo          : MetadataError: (:) [], ArgumentTransformationMetadataException
    + FullyQualifiedErrorId : RuntimeException

일반 콜렉션도 가능합니다.

[System.Collections.Generic.SortedDictionary[int, String]]$dict = [System.Collections.Generic.SortedDictionary[int, String]]::new()
$dict.GetType().FullName

$dict.Add(1, 'a')
$dict.Add(2, 'b')
$dict.Add(3, 'c')


$dict.Add('4', 'd') #powershell auto converts '4' to 4
$dict.Add('5.1', 'c') #powershell auto converts '5.1' to 5

$dict

$dict.Add('z', 'z') #powershell can't convert 'z' to System.Int32 so it throws an error

출력 결과를 표시합니다.

System.Collections.Generic.SortedDictionary`2[[System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]

Key Value
--- -----
  1 a
  2 b
  3 c
  4 d
  5 c
Cannot convert argument "key", with value: "z", for "Add" to type "System.Int32": "Cannot convert value "z" to type "System.Int32". Error: "Input string was not in a correct format.""
At line:15 char:1
+ $dict.Add('z', 'z') #powershell can't convert 'z' to System.Int32 so  ...
+ ~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodException
    + FullyQualifiedErrorId : MethodArgumentConversionInvalidCastArgument


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow