2017-05-15 3 views
0

에 점 표기법과 pscustomobject 액세스, 나는 개체 경로 문자열을 가지고 단지 한) 나는 다음을 수행하려고

$String = "$Object.Item1.Subitem1.Subsubvalue" 

-하지만 내가 할 수있는 방법을 찾을 수 없습니다 그것은

PS C:\> $Substring = $string.substring(8) 
PS C:\> $Object.$Substring 
Value 

내 유를 작동 ltimate 목표는 그

PS C:\> $Object.$Substring = "something else" 

의 내용을 분명히 $ 접근 방식을 하위 문자열 작동하지 않으며, 내가 해봤 다른 접근 방식을 수정하는 얻는 것입니다.

+0

, 그 당신이 실현하려 원하는 것을 명확하지. 여러 가지 방법으로 여러 가지 결과를 예상 할 수 있습니다. – restless1987

답변

2

Invoke-expression을 사용하여 전달 된 문자열을 구문 분석하여 명령 인 것처럼 처리 할 수 ​​있습니다.

Invoke-Expression -Command "$string" 

이 반환됩니다 :

그래서 당신은 다음과 같은 작업을 수행 할 수

그래서
Value 

당신은 할 수 있습니다 : 값을 설정합니다

Invoke-Expression -Command "$String = `"Something else`"" 

"뭔가 그밖에".

1

Invoke-Expression은 다른 언어의 eval보다 좋지 않습니다. 주어진 문자열을 코드로 평가하기 때문에 원하지 않는/예상치 못한 일을 할 확률이 너무 큽니다. 네가하는 일을 정확히 알지 않으면 그 길로가는 것을 권하지는 않는다.

대신 재귀 함수를보십시오 : 나를 위해

function Get-NestedItem { 
    Param(
     [Parameter(Mandatory=$true, Position=0)] 
     $InputObject, 

     [Parameter(Mandatory=$false, Position=1)] 
     [AllowEmptyString()] 
     [string]$Path = '', 

     [Parameter(Mandatory=$false, Position=2)] 
     [string]$Delimiter = '.' 
    ) 

    if ($Path) { 
     $child, $rest = $Path.Split($Delimiter, 2) 
     Get-NestedItem $InputObject.$child $rest 
    } else { 
     $InputObject 
    } 
} 

$Object = ... 
$Path = 'Item1.Subitem1.Subsubvalue' 

Get-NestedItem $Object $Path 
+0

흥미로운 접근 방법입니다! 나는 그것을 밖으로 시도 할 것이다. (그리고 나는 보안 위험에 대해서도 당신의 요지를 보았습니다) –