왜 안 돼요?PowerShell의 NET 개체가 현재 디렉토리를 사용합니까?
a를 사용할 때.PowerShell의 NET 개체는 파일 이름을 가져갑니다. 항상 상대적인 것으로 보입니다.C:\Windows\System32.
예를 들어,
[IO.File]::WriteAllText('hello.txt', 'Hello World')
...글을 쓸 것입니다.C:\Windows\System32\hello.txt,보다는C:\Current\Directory\hello.txt
PowerShell이 이 작업을 수행하는 이유는 무엇입니까?이 동작을 변경할 수 있습니까?변경할 수 없다면 어떻게 해야 합니까?
노력했습니다.Resolve-Path, 하지만 이는 이미 존재하는 파일에서만 작동하며, 항상 하기에는 너무 장황합니다.
.networking dir을 powershellworking dir로 변경할 수 있습니다.
[Environment]::CurrentDirectory = (Get-Location -PSProvider FileSystem).ProviderPath
이 행 뒤에 모든 .net 메서드는 다음과 같습니다.[io.path]::GetFullPath그리고.[IO.File]::WriteAllText문제없이 작동할 것입니다.
PowerShell이 이를 지키지 않는 이유.PowerShell의 작업 디렉토리 개념과 일치하는 현재 작업 디렉토리의 NET 개념은 다음과 같습니다.
- PowerShell 작업용 dir는 파일 시스템 기반이 아닌 공급업체에 있을 수 있습니다.HKLM:\소프트웨어
- 단일 PowerShell 프로세스에는 여러 개의 실행 공간이 있을 수 있습니다.각각의 실행 공간은 서로 다른 파일 시스템 위치로 cd'd될 수 있습니다.하지만, 그.NET/프로세스 "워킹 디렉토리"는 본질적으로 프로세스 전체적인 것이며 여러 워킹디렉터(런스페이스당 하나)가 존재할 수 있는 시나리오에서는 작동하지 않습니다.
편의를 위해 다음 사항을 추가했습니다.prompt명령이 완료될 때마다 실행되도록 기능합니다.
# Make .NET's current directory follow PowerShell's
# current directory, if possible.
if ($PWD.Provider.Name -eq 'FileSystem') {
[System.IO.Directory]::SetCurrentDirectory($PWD)
}
이는 어떤 스크립트(Win32 작업 디렉토리가 PowerShell 작업 디렉토리를 추적한다고 가정함)가 내 컴퓨터에서는 작동하지만 다른 스크립트에서는 작동하지 않기 때문에 반드시 좋은 아이디어는 아닙니다.
에서 파일 이름을 사용하는 경우.넷 메소드, 최선의 방법은 완전한 경로 이름을 사용하는 것입니다.아니면 사용
$pwd\foo.cer
powershell 콘솔에서 다음을 수행하는 경우:
C:\> [Environment]::CurrentDirectory
C:\WINDOWS\system32\WindowsPowerShell\v1.0
.net 은 어떤 폴더를 사용하는지 알 수 있습니다.
그 이유는 시스템32에서 PowerShell이 실행되고 있기 때문일 것입니다.PowerShell의 디렉토리에 cd할 때 powershell.exe의 작업 디렉토리는 실제로 변경되지 않습니다.
참조:
저는 오래전에 같은 문제에 부딪혔고 지금은 프로필의 처음에 다음을 추가합니다.
# Setup user environment when running session under alternate credentials and
# logged in as a normal user.
if ((Get-PSProvider FileSystem).Home -eq "")
{
Set-Variable HOME $env:USERPROFILE -Force
$env:HOMEDRIVE = Split-Path $HOME -Qualifier
$env:HOMEPATH = Split-Path $HOME -NoQualifier
(Get-PSProvider FileSystem).Home = $HOME
Set-Location $HOME
}
언급URL : https://stackoverflow.com/questions/11246068/why-dont-net-objects-in-powershell-use-the-current-directory
'programing' 카테고리의 다른 글
| qsort: 비교자 기능 자체 또는 비교자 기능 본문에 매개변수를 캐스팅하시겠습니까? (0) | 2023.10.24 |
|---|---|
| 런타임에 아이폰 앱의 제품명을 얻는 것? (0) | 2023.10.24 |
| WordPress의 사용자 지정 이미지 크기를 가져올 수 없습니다. (0) | 2023.10.24 |
| jQuery 플러그인:콜백 기능 추가 (0) | 2023.10.24 |
| 테이블 'xxxx'.AWS에 연결할 때 AspNetUsers'이(가) 존재하지 않습니다. (0) | 2023.10.24 |