작업 스케줄러 작업이 매핑 된 네트워크 드라이브에 액세스 할 수없는 이유는 무엇입니까?


27

로컬 파일을 네트워크 공유에 백업하기 위해 Robocopy를 실행하는 작업 스케줄러 작업이 있습니다. 네트워크 공유에 액세스하려면 도메인 자격 증명을 사용해야하지만 로컬 컴퓨터가 도메인에 없으며 작업이 로컬 관리자로 실행됩니다. 이 솔루션네트워크 공유를 일시적으로 매핑하고 매핑 해제하는 작업이 작동하지만 작업 스케줄러 작업 작업을 보는 사람에게는 암호가 일반 텍스트로 노출됩니다. 작업 스케줄러 작업은 Robocopy를 실행하고 적절한 드라이브 문자를 참조하면되므로 네트워크 드라이브를 일반적으로 반영구적으로 매핑하는 것이 좋습니다. 그러나 항상 "시스템이 지정된 경로를 찾을 수 없습니다"라는 오류가 발생합니다. 작업 스케줄러에서이 명령을 실행할 때 Robocopy 로그에서 명령이 높은 명령 프롬프트에서 제대로 작동하더라도 (작업이 가장 높은 권한으로 실행되도록 설정되어 있음). 또한 이 레지스트리 조정 을 수행 하여 관리자 권한 명령 프롬프트에서 매핑 된 드라이브에 액세스했습니다.

편집 : 명확히하기 위해 로컬 관리자로 로그인하여 관리자로 Windows 탐색기를 시작합니다. 네트워크 공유를 드라이브 문자 Y에 매핑합니다. 관리자 권한으로 명령 프롬프트를 시작하고 실행합니다.

C:\Windows\System32\Robocopy.exe C:\temp Y:\temp

잘 작동합니다. 사용자가 로그인했는지 여부에 관계없이 가장 높은 권한으로 정확하게 동일한 명령을 실행하는 작업 스케줄러 작업을 만듭니다. 나는 그것을 실행하고 오류가 발생합니다. 나는 통나무에 쓰고 얻는다

ERROR 3 (0x00000003) Getting File System Type of Destination Y:\temp\
The system cannot find the path specified.

뒤에

ERROR 3 (0x00000003) Creating Destination Directory Y:\temp\
The system cannot find the path specified.

로컬 경로 또는 네트워크 경로에 공백이 있습니까? 그렇다면 경로의 시작과 끝에서 큰 따옴표로 경로를 캡슐화하고 있습니까?
일요일

@SunWKim 어느 경로에도 공백이 없습니다.
Craig W

로컬에서 네트워크로 백업을 수행하는 데 사용하는 명령 줄은 무엇입니까? 어떤 종류의 네트워크 공유를 백업하고 있습니까? backup 명령을 수행 할 때 네트워크 공유를 사용할 수없는 (연결되지 않은) 것으로 생각합니다.
Sun

사용자 또는 "관리자"로 실행되고 있습니까? 사용자 인 경우 드라이브가 사용자에게 지속적으로 매핑됩니까?
Nick

@SunWKim 예, 매핑 후 드라이브가 연결되었습니다. 로컬 관리자에게는 네트워크 공유에 대한 권한이 없으므로 Robocopy를 실행하기 전에 다른 사용자로 매핑해야합니다.
Craig W

답변:


17

매핑 된 드라이브는 사용자 인터페이스 개념이며 이와 같은 백그라운드 작업에는 사용할 수 없습니다. UNC를 통해 대상에 액세스하고 작업을 실행하는 사용자에게 대상에 대한 액세스 권한이 있는지 확인하십시오.


불가능합니다. 컴퓨터가 도메인에 없으므로 도메인 이외의 사용자로 작업을 실행해야하지만 도메인 사용자 만 네트워크 공유에 액세스 할 수 있습니다.
Craig W

나는 이것이 게임에 매우 늦었다는 것을 알고 있지만, 작업을 2 개의 예약 된 작업, 즉 도메인 자격 증명을 가진 네트워크 공유 및 매핑 된 드라이브에 대한 액세스 권한이있는 로컬 관리자로 실행하는 작업으로 분리하려고 했습니까? 그것들을 엇갈리게 배치하거나 파일 뮤텍스 또는 무언가를 사용하여 순서대로 진행해야합니다.
Dan Csharpster

7

필자의 경우 run with highest privileges플래그를 선택 취소 했지만 드라이브를 매핑 한 사용자와 동일한 사용자에서 작업을 실행하고있었습니다.


그게 나야 맞는 말이다.
Tom Haws

4

다음을 사용하십시오.

pushd \\machine\share

예약 된 작업의 배치 파일 내 네트워크 공유 드라이브는 사용자 실행 환경에서만 사용할 수 있습니다. "pushd"를 사용하면 스크립트 컨텍스트에서 실행할 수 있습니다.

완료되면 다음을 사용하십시오.

popd \\machine\share

드라이브를 매핑 해제합니다.

참조 : https://blog.adrianbanks.co.uk/windows/2007/03/08/accessing-network-file-shares-from-a-command-prompt.html


1

또 다른 옵션은 Robocopy가 지원하는 전체 네트워크 경로를 사용하는 것입니다. 즉 robocopy c : \ temp \\ server \ share \ temp

또는 서버 자체에서 백업을 실행하십시오. 백업 프로세스 전용 도메인 관리자 계정을 만듭니다. 도메인 관리자 만 액세스 할 수있는 텍스트 파일에서 암호를 robocopy에 입력하십시오.

몇 년 전에 네트워크의 모든 시스템에 필요한 파일을 이런 식으로 백업하는 .cmd 스크립트를 여러 개 만들었습니다. 내가 사용한 유일한 외부 프로그램은 Cgywin의 Grep 명령과 명령 프롬프트 smtp mail sender였습니다.

시스템에서 네트워크를 스캔 할 스크립트를 하나 만들었습니다. 모든 시스템 이름의 텍스트 파일을 생성하고 발견 된 새로운 시스템의 이메일을 통해 경고합니다. (시스템이 건너 뛰기 위해 구문 분석 할 구성 파일이있었습니다.) 각각의 새 시스템에는 백업 디렉토리가 작성되고 백업 구성 파일이 배치됩니다. 사용자는이 파일을 수정하고 백업이 필요한 디렉토리를 나열 할 수 있습니다. 또한 백업 시간을 지정하여 사무실에있을 때는 발생하지 않습니다. 처리 시간이 걸리지 않았기 때문에 5 분마다 서버에서이 스크립트를 실행했으며 새 시스템이 네트워크에 연결되면 경고하는 보안 기능이 마음에 듭니다.

다른 스크립트는 모든 개별 백업 구성 파일을 구문 분석하고 해당 시스템에서 백업을 실행하도록 작업을 예약합니다. 이것은 매일 오전 12시 1 분에 실행되었습니다.

마지막으로 백업 스크립트는 스케줄러가 전달한 구성 파일을 구문 분석하고 robocopy를 사용하면 모든 파일을 복사합니다. 사용자가 구성 파일을 편집했기 때문에 구성 파일에 대한 전체 오류 검사가 있었고 문제에 대한 이메일을 받았습니다.

사용자는 백업 파일을 읽을 수 있지만 백업을 삭제할 수는 없습니다. 이로 인해 불만을 품은 직원의 피해로부터 보호 할 수있었습니다.

아마도 .vbs 또는 powershell에서 훨씬 더 우아한 것을 만들었을 수도 있지만 실제로는 프로그래머가 아닙니다. 저의 프로그래밍 수업에는 Cobal과 JCL이 포함되었습니다. 내가 떠났을 때 스크립트를 복사했지만 누가 현재 어디에 있는지 알고 있습니다.


1

"사용자 로그온 여부에 관계없이 실행"옵션을 "사용자가 로그온 한 경우에만 실행"옵션을 변경하여 문제를 극복했습니다. 이것을 시도하면 도움이 될 수 있습니다.


1
echo Get-Date >> c:\mount_nfs_log.txt
net use X: \\share\folder password /user:domain\user>> c:\mount_nfs_log.txt 2>&1

이 powershell 스크립트를 생성하고 작업을 SYSTEM으로 예약하고 재부팅시 실행되도록 설정하면 UNC가 다른 문제로 인해 옵션이 아니기 때문에 스크립트에서 드라이브 문자를 사용할 수있었습니다.


이것은 나를 위해 문제를 해결했습니다! 스크립트가 궁금해하기 전에이 명령을 실행하여 인증으로 로그인하십시오! 이를 통해 강력한 사용자 계정으로 "미러 사용자 계정"을 작성해야하는 번거 로움이 해결됩니다.
Tschallacka 2016 년

1
처음으로 누군가가 스택 오버플로를 도와 주었을 때 도와 드리겠습니다. 또한 이전에 사용했던 것 대신 "echo Get-Date"를 사용하십시오.
Ryan McGrath

로깅이 필요하지 않았으므로 cmd /c net use작업의 복사 작업 항목 앞에 작업 항목을 추가하고 문제가 해결되었습니다. 귀하의 게시물은 쉬운 솔루션을 제공하는 제안 된 미러 계정을 발견 한 4 시간 후에 처음이었습니다. 좋은 일을 계속하십시오!
Tschallacka 2016 년

이 스크립트를 사용하여 UNC 경로를 계속 유지하고 있습니다. 드라이브 문자를 UNC 경로에 할당 한 다음 해당 드라이브 문자를 참조하기 때문에 여전히 \\ServerName\ShareName이런 종류의 논리 를 유지해야합니다 . 또한 NET USE배치를 통해 실행되므로 SYSTEM 계정으로 작업 스케줄러를 사용하여 예약 하는 경우 PowerShell 일 필요는 없습니다 . 작업을 통해 실행하도록 예약 한 스크립트, 논리 등 유형에 관계없이 수행 할 수 있습니다. 스케줄러.
Pimp Juice IT

또한 명확히하기 위해, NET USE \\<ServerName>\<ShareName> <password> /user:<domain>\<username>공유에 대한 인증 만 실제 드라이브 문자가 아닌 필요한 경우 드라이브를 지정할 필요가 없으며 그대로 사용할 수도 있습니다 .
Pimp Juice IT

0

"시작 위치"위치를 "c : \"로 변경하십시오. 이것은 나를 위해 고치는 것처럼 보였으므로 시스템이 cmd.exe가 기본 \ windows \ system32 \에서 보안 기능으로 실행되는 것을 막을 수 있습니다.


0

Windows 작업 스케줄러에서 스크립트를 호출 할 때 드라이브가 r : \ server \ share로 매핑 된 Windows로 r : /xxxfilename.txt 에 액세스하는 것과 동일한 문제가 발생했습니다 . //server/share/xxxfilename.txt를

사용하여 해결 했습니다. 백 슬래시는 슬래시로 변환됩니다. 이제 내 bash cygwin 스크립트가 Windows 작업 스케줄러 및 cygwin 셸에서 실행됩니다. 참고 : " net use "명령은 셸에서 맵 드라이브에 액세스 할 수 있지만 Windows 작업 스케줄러에서이 명령을 실행할 때 사용할 수없는 R :을 표시합니다.



슈퍼 유저에 오신 것을 환영합니다! 질문을주의 깊게 다시 읽으십시오. 귀하의 답변은 원래 질문에 대한 답변이 아닙니다 . OP는 Cygwin 또는 bash 사용에 대해 언급하지 않습니다.
DavidPostill

0

다른 사용자가 언급했듯이 "사용자가 로그온했는지 여부에 관계없이 실행"옵션을 "사용자가 로그온 한 경우에만 실행"으로 설정하면 작동하지 않는 것 같습니다. 그런 다음 매핑 된 경로 (예 : Z :) 또는 서버 경로 (예 : \\ ServerName \ Path)를 사용할 수 있습니다.

물론,이 옵션을 사용하는 경우, 해당 드라이브에 액세스 할 수있는 사용자로 서버에 로그인했는지와 같이 지시 한대로 수행해야합니다. 나는 이와 같은 많은 작업 설정을 가진 오래된 회사에 있었던 것을 기억합니다. 어느 날 누군가 주 작업 서버에서 "로그 아웃"했는데 어떤 식 으로든 시스템을 종료하지 않았기 때문에 어떤 영향을 줄 것이라고 기대하지 않았습니다.

또한 요즘 Windows는 많은 자체 호출 시스템 재부팅을 좋아합니다. 따라서이 솔루션은 모든 위험 부담으로 사용하십시오.


0

또한 스크립트에서 매핑을 만들고 암호에 %가 포함되어 있으면 스크립트가 taskscheduler에서 작동하지만 %는 commandprompt에서 작동하려면 %%로 작성되어야합니다.


0

배치 스크립트 자체에 추가되는 다음 명령을 사용하여 Windows 스케줄 태스크를 사용하여 로컬 시스템에 파일을 복사하기 위해 Windows 스케줄 태스크에서 배치 스크립트를 실행할 수 있습니다. 순 사용 Y : "\\ xxx \ xxx \ xxx cd / d Y : 순 사용자 / d Y : / Y


-2

감사합니다, "start in c : \"를 사용하면 문제가 해결되었다고 생각합니다.이 문제를 추적하여 해결할 것입니다.

일괄 처리를 직접 클릭하면 완벽하게 실행되었지만 예약 된 작업이 아닌 동일한 문제가 발생했습니다.


이것은 저자의 질문에 대답하지 않습니다. 답변으로 의견을 남기지 마십시오.
Ramhound

답변으로 "감사"를 추가하지 마십시오. 사이트에 시간을 투자 하면 원하는 답변을 찬성 할 수있는 충분한 권한 을 얻게됩니다 . 이는 수퍼 유저의 말입니다. 감사합니다.
DavidPostill
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.