2016-10-25 1 views
0

내 요구 사항은 Windows 서비스의 PathName 부분을 사용하여 폴더 경로를 형성하는 것입니다. 다른 EXE가에있다Windows 서비스의 PathName 부분을 사용하여 폴더/파일 경로 형성 - 더 나은 접근법?

"예를 들어

은"Microsoft 배포 에이전트 "Windows 서비스의 경로 이름"\ 프로그램 파일 마이크로 소프트 비주얼 스튜디오 14.0 \ 릴리스 관리 \ 빈 \ DeploymentAgent.exe \ (86) C "입니다 C : ₩ Program Files (x86) ₩ Microsoft Visual Studio 14.0 ₩ Release Management ₩ Client ₩ bin ₩ ReleaseManagementBuild.exe "를 참조하십시오.

그래서이 경로를 ReleaseManagementBuild.exe로 지정해야합니다. 그래서 Microsoft Release Management에서 릴리스를 실행하도록 실행할 수 있습니다. 이는 서비스의 PathName이 모든 서버에서 동일하지 않기 때문에 필요합니다. 하나는 C 드라이브에 있고 다른 하나는 다른 드라이브에있을 수 있습니다.

저는 Join-Path 또는 [IO.Path] :: Combine을 사용하여 두 가지 방법을 살펴 보았습니다.

"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" 

$RMBuildExePath = Get-WmiObject win32_service | ?{$_.Name -like "*VSO*"} | select PathName 

[string]$RMBuildExePathString = $RMBuildExePath.PathName 

[string[]]$split = $RMBuildExePathString.Split("\") 



$WorkFolder = [IO.Path]::Combine($split[0].Replace("`"","") + "\", $split[1], $split[2], '_work') 

Test-Path $WorkFolder 



$work = Join-Path $split[0].Replace("`"","") $split[1] | Join-Path -ChildPath $split[2] | Join-Path -ChildPath '_work' 

Test-Path $work 

"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" 

파일 경로를 구성하는 더 좋은 방법이있을 수 있습니까? 레지스트리 키가 될 수 있습니까? 아니면 환경 변수?

답변

1

$ RMBuildExePath = Get-WmiObject win32_service | ? {$ _. 이름 - 유사 "VSO"} | -ExpandProperty를 PathName에게

$ RMBuildExePath의 -match 선택 '^'[AZ를] \ [^ \] \ [^ \] '

$ 작업 = $ 일치 [0] + "_work"-replace을 '' ', ""

$ work

+0

답장을 보내 주셔서 감사합니다. Split-Path에 대한 당신의 제안을 좋아합니다. 이 방법은 상위 폴더까지 폴더를 1 개 줄이는 것입니다. 서비스의 PathName은 "C : \ Apps \ agent \ bin \ somefolder \ agent.exe"와 같습니다. 관심있는 폴더 경로는 "C : \ Apps \ agent \ _work"입니다. Split-Path -Parent가 C : \ Apps \ agent \ bin \ somefolder를 제공합니다. 나는 C : \ apps \ agent에 도착하기 위해 부모를 두 번 더 실행해야 할 것입니다. 그리고 _work로 Join-Path를 사용하여 "C : \ Apps \ agent \ _work"에 도착할 수 있습니다. –

관련 문제