큰따옴표로 묶인 문자열에서 개체의 속성을 사용하려면 어떻게 해야 합니까?
다음 코드가 있습니다.
$DatabaseSettings = @();
$NewDatabaseSetting = "" | select DatabaseName, DataFile, LogFile, LiveBackupPath;
$NewDatabaseSetting.DatabaseName = "LiveEmployees_PD";
$NewDatabaseSetting.DataFile = "LiveEmployees_PD_Data";
$NewDatabaseSetting.LogFile = "LiveEmployees_PD_Log";
$NewDatabaseSetting.LiveBackupPath = '\\LiveServer\LiveEmployeesBackups';
$DatabaseSettings += $NewDatabaseSetting;
문자열 execute 명령에서 속성 중 하나를 사용하려고 할 때:
& "$SQlBackupExePath\SQLBackupC.exe" -I $InstanceName -SQL `
"RESTORE DATABASE $DatabaseSettings[0].DatabaseName FROM DISK = '$tempPath\$LatestFullBackupFile' WITH NORECOVERY, REPLACE, MOVE '$DataFileName' TO '$DataFilegroupFolder\$DataFileName.mdf', MOVE '$LogFileName' TO '$LogFilegroupFolder\$LogFileName.ldf'"
그것은 단지 가치를 사용하려고 노력합니다.$DatabaseSettings의 보다는.$DatabaseSettings[0].DatabaseName그것은 유효하지 않습니다.
해결 방법은 새 변수로 복사하는 것입니다.
큰따옴표로 묶인 문자열에서 개체의 속성에 직접 액세스하려면 어떻게 해야 합니까?
변수 이름을 큰따옴표로 묶은 문자열로 묶으면 해당 변수의 값으로 대체됩니다.
$foo = 2
"$foo"
된다
"2"
단일 따옴표를 사용하지 않으려면 다음을 수행합니다.
$foo = 2
'$foo'
로 묶은을 나속액하그변묶따로대은문인사합다해니묶같야어하에 포함시켜야 .$():
$foo = 1,2,3
"$foo[1]" # yields "1 2 3[1]"
"$($foo[1])" # yields "2"
$bar = "abc"
"$bar.Length" # yields "abc.Length"
"$($bar.Length)" # yields "3"
PowerShell은 이러한 경우에만 변수를 확장할 뿐 그 이상은 아닙니다. 또는 계산을 하여 더 식을 평가하려면 인 " " ", " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " "$( )이로 인해 내부 식이 평가되고 문자열에 포함됩니다.
@조이가 정답을 가지고 있지만, 왜 당신이 평가를 강요해야 하는지에 대해 조금 더 덧붙이자면.$():
( 확장은 PowerShell을 PowerShell이라고 됨).ToString()일부 "홀수" 결과를 설명할 수 있는 개체에 대한 메서드).
다음은 명령줄 맨 끝에 포함된 예제입니다.
...\$LogFileName.ldf
기본적으로 개체의 속성이 확장된 경우 위의 내용은 다음과 같이 확인됩니다.
...\
객된이후로에 의해 된 객체 $LogFileName에는 라는속갖않것입을니다지성라는 .ldf,$null(또는 빈 문자열)이 변수로 대체됩니다.
설명서 참고: 문자열 보간은 다루지만, PSv5에서는 자세히 다루지 않습니다.
Joey의 유용한 답변을 PowerShell의 문자열 확장에 대한 실용적인 요약(이중 따옴표로 묶은 문자열 보간)으로 보완합니다."..."a.k.a. 확장 가능한 문자열), 여기에 이중으로 표시된 문자열 포함)
, (또는 , ...) 및 (환경 변수)와 같은 참조만 문자열에 직접 포함할 수 있습니다. 즉, 변수 참조 자체만 다음 항목에 관계없이 전체적으로 확장됩니다.
예.,
"$HOME.foo"와 같은 것으로 확장됩니다.C:\Users\jdoe.foo왜냐하면.foo부분이 속성 액세스가 아닌 문자 그대로 해석되었습니다.문자열의 후속 문자에서 변수 이름을 구분하려면 및(예: )로 묶습니다.
변수 이름 뒤에 다음과 같은 경우 특히 중요합니다.:PowerShell이 다른 방법을 사용할 경우 두 제품 사이의 모든 것을 고려할 수 있습니다.$그리고:스코프 지정자, 일반적으로 보간 실패를 유발합니다. 예:"$HOME: where the heart is."휴식, 하지만"${HOME}: where the heart is."의도한 대로 작동합니다.
(또는,`-최후의::"$HOME`: where the heart is."하지만 변수 이름을 따르는 문자가 실수로 이전 문자와 이스케이프 시퀀스를 형성하지 않을 경우에만 작동합니다.`,예를 들어`b_Special_Characters 도움말 항목에 대한 개념 참조).료기하를 것.
$는또."문자 그대로, 이스케이프 문자로 접두사를 붙입니다. (백티크); 예:
"`$HOME's value: $HOME"
배열 첨자 사용 및 개체 변수의 속성 액세스를 포함하여 다른 모든 경우에는 하위 표현식 연산자(예:
"PS version: $($PSVersionTable.PSVersion)"또는"1st el.: $($someArray[0])")- 용사를 합니다.
$(...)심지어 전체 명령의 출력을 이중 패리티 문자열에 포함할 수도 있습니다(예:"Today is $((Get-Date).ToString('d')).").
- 용사를 합니다.
보간 결과가 반드시 기본 출력 형식과 동일하게 나타나지는 않습니다(예를 들어, 변수/하위 표현식을 콘솔에 직접 인쇄한 경우 표시되는 내용은 기본 포맷터를 포함합니다. 참조).
배열을 포함한 집합은 요소의 문자열 표현 사이에 단일 공간을 배치하여 문자열로 변환됩니다. (기본적으로 기본 설정 변수를 설정하여 다른 구분 기호를 지정할 수 있지만 실제로는 거의 볼 수 없습니다.) 예:
"array: $(@(1, 2, 3))"확량수array: 1 2 3다른 유형의 인스턴스(자체가 컬렉션이 아닌 컬렉션 요소 포함)는 IF 또는 matable을 호출하여 문자열화됩니다.인스턴스 유형이 IFormatable 인터페이스[1]를 지원하는 경우 또는 .psobject를 호출하여 불변 문화를 사용하는 ToString() 메서드입니다.ToString(). 대부분의 경우 기본 .NET 유형을 호출합니다.ToString() 메서드[2],의미 있는 표현을 제공할 수도 있고 제공하지 않을 수도 있습니다: (비선택적) 유형이 구체적으로 재정의하지 않은 경우
.ToString()메소드, 전체 유형 이름(예:"hashtable: $(@{ key = 'value' })"확량수hashtable: System.Collections.Hashtable).콘솔과 동일한 출력을 얻으려면 파이프로 연결하고 적용할 하위 표현식을 사용합니다.
.Trim()및 빈 줄을 를 들어 하는경우선및후빈제다선니거합을행원행▁to,다. 예:
"hashtable:`n$((@{ key = 'value' } | Out-String).Trim())"산출량:hashtable: Name Value ---- ----- key value
이 놀라운 행동은 문화에 민감한 표현을 지원하는 유형의 경우,$obj.ToString()현재 문화에 적합한 표현을 산출하는 반면,"$obj"(문자열 보간법) 항상 문화적 의미의 표현이 됩니다. 다음 답변을 참조하십시오.
주목할 만한 재지정:
이전에 논의된 컬렉션의 문자열화(같은 것이 아닌 요소의 공백으로 구분된 목록)System.Object[]).
의 해시 테이블과 같은 표현[pscustomobject]빈 문자열이 아닌 인스턴스(여기에 표시됨)를 입력합니다.
@조이는 좋은 대답을 합니다.String을 사용하여 .NET 모양을 더욱 돋보이게 하는 또 다른 방법이 있습니다.동일한 형식으로 개체의 속성에 액세스할 때 선호합니다.
자동차에 관한 것들:
$properties = @{ 'color'='red'; 'type'='sedan'; 'package'='fully loaded'; }
개체 만들기:
$car = New-Object -typename psobject -Property $properties
문자열 보간:
"The {0} car is a nice {1} that is {2}" -f $car.color, $car.type, $car.package
출력:
# The red car is a nice sedan that is fully loaded
따옴표 내에서 속성을 사용하려면 다음과 같이 하십시오.속성을 인쇄하려면 괄호 밖의 $를 사용해야 합니다.
$($variable.property)
예:
$uninstall= Get-WmiObject -ClassName Win32_Product |
Where-Object {$_.Name -like "Google Chrome"
출력:
IdentifyingNumber : {57CF5E58-9311-303D-9241-8CB73E340963}
Name : Google Chrome
Vendor : Google LLC
Version : 95.0.4638.54
Caption : Google Chrome
이름 속성만 원하는 경우 다음과 같이 수행합니다.
"$($uninstall.name) Found and triggered uninstall"
출력:
Google Chrome Found and triggered uninstall
언급URL : https://stackoverflow.com/questions/1145704/how-can-you-use-an-objects-property-in-a-double-quoted-string
'programing' 카테고리의 다른 글
| Bash에서 해시 테이블을 정의하는 방법은 무엇입니까? (0) | 2023.05.24 |
|---|---|
| SqlConnectionStringBuilder를 사용하여 연결 문자열에서 데이터베이스 이름을 가져오는 방법 (0) | 2023.05.24 |
| 그 방법이 Moq에서 호출되지 않았는지 어떻게 확인합니까? (0) | 2023.05.24 |
| UI Navigation Controller의 뒤로 막대 단추를 누를 때 작업 실행 (0) | 2023.05.20 |
| 코드가 최적화되었거나 네이티브 프레임이 호출 스택의 맨 위에 있으므로 식을 계산할 수 없습니다. (0) | 2023.05.20 |