programing

XML 파일을 파워셸에 저장하려면 완전한 경로가 필요합니다. 왜죠?

powerit 2023. 9. 25. 23:10
반응형

XML 파일을 파워셸에 저장하려면 완전한 경로가 필요합니다. 왜죠?

파워셸의 XML 기능을 사용하여 .config 파일을 수정하고 있습니다.XML 문서를 호출합니다.전체 경로 이름을 입력하지 않는 한 저장은 효과가 없습니다.

# Open the xml file
$config = [xml](get-content web.config)
#
# modify the XML
$config.SelectNodes("./configuration/connectionStrings/add[@name='LocalSqlServer']") | % { $connNode = $_ }
$connNode.connectionString = $connNode.connectionString -replace '^(.*)Server=[^;]+(.*)$', '$1Server=192.168.5.2$2'
#
#
# Now I save it again
#
# This doesn't save it!
$config.Save("web.config");
# However, this works
$config.Save("{0}\\web.config" -f (get-location));

왜 $config가 안되나요?저장("web.config") 작업?

로컬 디렉토리가 아닌 다른 곳에 저장하게 된 건가요?

그 이유는 현재 powershell의 working 디렉토리가 process working 디렉토리와 동일하지 않기 때문입니다.

파워셸 작업 방향(Get-Location)에서는 레지스트리 또는 인증서와 같은 다양한 파일 시스템 공급자를 사용할 수 있습니다.또한 파워셸은 여러 개의 실행 공간을 가질 수 있기 때문에 각각의 현재 작업 디렉토리를 가질 수 있습니다.

여기에는 두 가지 해결책이 있습니다.

하나는 사용하는 것입니다.Resolve-Path (Resolve-Path "orders.xml"), 값을 반환하기 전에 존재 여부를 확인하므로 새 파일을 생성할 경우 이 문제가 발생할 수 있습니다.다른 옵션은 get-location의 별칭을 사용하는 것입니다.$pwd예를 들어.("$pwd\orders.xml")

예를 들어 2번 선을 다음과 같이 변경할 수 있습니다.

$config = [xml](get-content (Resolve-Path "web.config"))

아니면

$config = [xml](get-content "$pwd\web.config")

그리고 각각 12번 행이 될 것입니다.

$config.Save((Resolve-Path "web.config"));

아니면

$config.Save("$pwd\web.config");

만약 현재 작업 디렉토리에 들어가지 않았다면 $home을 확인했을 것입니다.

언급URL : https://stackoverflow.com/questions/4822575/saving-an-xml-file-in-powershell-requires-complete-path-why

반응형