동일한 명령에서 PowerShell이 ​​cmd.exe와 다르게 동작하는 이유는 무엇입니까?


0

문제는 아마도 두 프로그램이 다르게 작동한다는 것을 알 수있는 시나리오에서 가장 잘 설명 될 것입니다.

con 이라는 파일이 포함 된 하드 드라이브에서 Linux 시절의 오래된 백업을 받았습니다 . MSDN이 상태로 , 죄수는 예약 된 장치 이름과 파일에 사용되지 않을 수 있습니다 :

파일 이름으로 다음과 같은 예약 된 장치 이름을 사용하지 마십시오.

CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, ​​COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8 및 LPT9

따라서 파일을 삭제하는 데 문제가 있었지만 수퍼 유저 응답 에서이 명령에서 찾은 적절한 이름 이스케이프를 사용하여 파일 을 삭제할 수있었습니다.

del "\\.\F:\Movies\Con Man\Con.Man.2018.720p.WEBRip.x264-[YTS.AM].mp4"

먼저 PowerShell을 통해 주어진 명령으로 파일을 삭제하려고했습니다. 디렉토리 또는 드라이브가 존재하지 않는다는 오류가 발생했습니다. C : \ WINDOWS \ System32 \ cmd.exe 만 파일을 삭제할 수있었습니다. 관리자 권한으로 두 셸을 모두 실행했습니다.

그래서이 시점부터 나는 단순히 알고 싶었습니다. 왜 그들은 다르게 행동합니까? PowerShell에 일종의 분리 권한 수준이 있습니까? 아니면 일종의 특수 샌드 박스에서 실행 중입니까?


1
잠깐만 – 예제의 파일은 실제로 이름이 지정되지 않았 con습니까?
grawity

@grawity 그렇습니다. 내가 인용 한 명령은 con이라는 파일을위한 것이 아니라 con (그리고 con 만) 인 파일에 사용했으며 cmd.exe를 통해 작동했습니다. Linux에서 소프트웨어 개발자 시절에 나타나는 자동 생성 파일이라고 생각합니다. 나는 그것이 구체적으로 어떻게 나타 났는지 지금은 알지 못한다.
narranoid

답변:


0

둘 다.

명령 프롬프트는 이전 MS-DOS의 연속으로, 특수 장치와 통신하는 유일한 방법은 장치 이름을 사용하는 것입니다 : PRN, CON 등

이것은 기본적으로 장치가 호출하고 그 뒤에 마침표가 오는 파일은 Windows에서 불법임을 의미합니다. MS-DOS에는 해결 방법이 있지만 Powershell은 해결 방법이 없습니다. 이것은 기본적으로 Windows에서이 잘못된 파일 이름을 위반 한 파일로 작업 할 수 없음을 의미합니다.

그렇습니다. 그런 이유로 인해 그들은 매우 다릅니다. 그들이 할 수있는 것뿐만 아니라 전체 구문이 다릅니다. Powershell을 사용하면 명령 프롬프트에서 할 수 있지만 다른 방법으로는 할 수 없습니다.


PowerShell의 추가 기능에 대해 알고 있지만 제 경우에는 모두 사용할 수있는 명령을 사용했지만 PowerShell에는 여전히 문제가있었습니다. 먼저 PowerShell에서도 Remove-Item을 시도했지만 액세스 번호 오류가 발생했습니다.
narranoid

그리고 경로 자체가 특별하고 powershell이 ​​파일에 정상적으로 액세스 할 수 있기 때문에 특수 액세스 경로를 사용할 필요가 없으며 작동하지도 않습니다.
LPChip

그러나 일반 경로 구문으로 삭제하려고 시도한 후 특수 액세스 경로 구문을 연구하기 시작했습니다. 그리고 그것은 PowerShell에서도 작동하지 않았습니다.
narranoid

더 많은 테스트를 수행했으며 실제로 powershell이 ​​파일을 가져올 수없는 것 같습니다. Powershell은 \\. \와 같은 대체 스트림을 이해하지 못하므로이를 통해 작동하지 않습니다. 그러나 당신은 물었습니다. 그들은 다릅니다. 그러나 실수를 바로 잡기 위해 답을 편집하겠습니다.
LPChip

와, 노력해 주셔서 감사합니다! 그것은 내 질문에 대한 꽤 괜찮은 대답입니다.
narranoid
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.