2016-08-24 3 views
3

전에 파워 쉘 (5) 클래스의 scriptproperty을 만들 수있는 적절한 방법은, 객체는 새로운 객체와 "이동"생성 될 수 있고, 추가 회원 확장 할 수 있는가 . Powershell 5에서는 클래스를 도입했지만 기본적인 속성과 메서드 만 허용합니다. 스크립트 속성 (IE는 속성이 아니라 메서드로 볼 수 있지만 이동 중에도 계산되는 속성)을 에뮬레이트 할 수있는 적절한 방법이 있습니까?5 파워 쉘 버전에서

다음 코드는 생성자의 해킹 덕분에 원하는 결과를 제공합니다. 이 해킹을 피할 수 있습니까?

class fakescriptproperty { 
    hidden [datetime] _currenttime() { return (Get-Date) } 

    fakescriptproperty() { 
     Add-Member -InputObject $this -MemberType ScriptProperty ` 
      -Name currenttime -Value { $this._currenttime() } 
    } 
} 

$test = New-Object -TypeName fakescriptproperty 
$test.currenttime 
+0

문제, PSObjects가 PowerShell을 스크립트에 사용하도록 설계되어있는 속성 설정 처리하는 -SecondValue 스크립트 블록을 특정 할 수있다. 수업은 프로그래밍에 사용하기 위해 더 많이 설계되었습니다. 클래스를 생성하는 기능이 유용합니다. 엄격한 객체 요구 사항 및 입력과 같은 특정 이유로이 작업을 직접 수행하고 싶었던 몇 가지 사례가있었습니다. 그러나 프로그래밍을위한 .NET 클래스가 가장 가능성이 큽니다. 스크립트 속성을 추가 할 수 있다면 놀랄 것입니다 ... –

답변

0

확실하지 않은 문제가 여기 있습니다. 이것이 내가 커스텀 객체를 생성, 확장 및 액세스하는 방법입니다. 네가 다른 일을 좇 으면 나에게 알려줘.

# Creating new object with key/value hashtable 
$customObject = New-Object psobject -Property @{key1 = "value" ; key2 = "value2"} 

# Adding member to custom object 
$customObject | Add-Member -MemberType NoteProperty -Name key3 -Value value3 

# This will return value3 
$customObject.key3 

=========================================== ===============

편집 - 수업에 익숙하지 않습니다. PowerShell 5에서는 ScriptProperty 멤버를 사용하여 사용자 지정 개체를 확장하고 이동 중에 계산되는 스크립트 블록을 지정할 수 있습니다 (hackery 필요 없음).

$test = New-Object psobject 
$test | Add-Member -Name currentime -MemberType ScriptProperty -Value {Get-Date} 
$test.currentime 

은 (이 테스트시있는 StackOverflowException로 계속 실행)

+0

수업을 사용하고 싶습니다. 그게 전부입니다. 이는 훨씬 강력하고 읽기 쉽고 유지하기가 쉽습니다. 그러나 Add Member의 가장 까다로운 멤버 유형을 모방 할 방법을 찾을 수는 없습니다. –