2010-02-11 6 views
10

여기에 문제가 있습니다 :PowerShell 스크립트에서 명령을 관리자로 실행하십시오. UAC

서버에서 원격으로 스크립트를 실행하려고합니다.

나는 두 상자의 관리자이며 방화벽 예외가 발생하고 원격 관리자가 활성화되며 다른 모든 것들이 잘 보입니다.

invoke-command -ComputerName $ComputerName -ScriptBlock ` 
{ 
    cd C:\Windows\System32\inetsrv\; 
    ./appcmd.exe ADD vdir /app.name:<SiteName>/ /path:/<VDir Name> /physicalPath:<Path to files> 
} 

나는 R2 상자 2K8 서버는 반환

ERROR (hresult:80070005, message:Failed to commit configuration changes. Access is denied. 

가에 실행하려고 서버에서 다음과 같은 오류이다가 계속 나는이 문제는 UAC 문제이다 생각하고있다. 어쨌든 UAC 상자에서 예를 클릭하지 않고도 관리자 권한으로 실행할 수 있습니까?

이 코드는 결국 완전히 자동화되어야하는 스크립트가됩니다.

도움을 주시면 감사하겠습니다.

+0

물론 UAC가 아닙니다. 나는 UAC, 방화벽, 그리고 내가 방해 할 수 있다고 생각할 수있는 모든 것을 비활성화했다. 나는 또한 폭군이 제안한 레지스트리 변경을했다. 둘 다 작동하지 않습니다. 그것의 이상한. 그것은 작업이 성공한 다음 동일한 액세스 거부 오류가 발생했다고합니다. – Tim

+0

원격 powershell 인스턴스에서 'whoami/all'을 실행하고 실제로 어떤 권한이 있는지 확인할 수 있습니까? – tyranid

+0

나는 명령을 실행하고 내 도메인 계정 이름, 도메인에 속한 그룹 및 권한 목록을 나열했습니다. 모든 권한은 관리자 수준이며 사용 가능으로 설정되어있는 그룹 중 하나는 Administrators 그룹에 있으며 모두 올바르게 표시됩니다. – Tim

답변

10

확인. 몇 가지 연구와 테스트를 마친 후 문제를 파악했습니다. UAC와 방화벽 및 스크립트가 작동하지 않는 것을 막은 후에 조금 더 자세히 파고 들어가서 주된 문제는 invoke-command가 명령을 실행하는 방법이라는 것을 발견했습니다. 스크립트를 실행하는 사람의 자격 증명을 사용하여 서버에 인증 한 다음 다른 계정을 사용하여 권한을 실행하거나 특정 명령을 실행할 수 없도록 사용자의 권한을 낮추려고합니다.

-credentials 스위치를 invoke 명령에 추가했는데 모든 것이 잘 작동합니다. 아래의 수정 코드 샘플 :

$user = New-Object Management.Automation.PSCredential("$UserName", $securePassword) 
invoke-command -ComputerName $ComputerName -Credential $user -ScriptBlock ` 
{ 
    cd C:\Windows\System32\inetsrv\; 
    ./appcmd.exe ADD vdir /app.name:<SiteName>/ /path:/<VDir Name> /physicalPath:<Path to files> 
} 
+0

그래서 관리자 권한이 필요한 스크립트를 작성할 때 스크립트에서 일반 텍스트로 사용자 이름과 암호를 사용하는 것보다 나은 방법이 있습니까? 정말? 관리자로 서비스를 실행하는 것만으로는 충분하지 않습니다 ... 관리자 권한이 필요한 Windows 서비스 설치를 스크립팅하는 가장 좋은 방법은 무엇입니까? –

+1

대신 Get-Credential cmdlet을 통해 사용자가 자격 증명을 입력하도록 할 수도 있습니다. – riezebosch

-3

UAC 상자에서 예를 클릭하지 않고도 관리자 권한으로 실행할 수 있습니까?

가능한 경우 UAC의 요점을 무시합니다.

따라서 실제 솔루션은 상자에서 UAC를 사용하지 않도록 설정하는 것입니다.

+0

불행히도 UAC를 비활성화하면 높은 가시성 서버에 있기 때문에 옵션이 아닙니다. 누군가가 해결책이나 해결 방법을 찾아 낼 수 있기를 바랍니다. 어쩌면 내가 뭔가 잘못하고있는 것일 수도 있습니다. – Tim

+0

다른 대안은 이러한 스크립트를 시작한 모든 스크립트를 상승시킨 것입니다. 그런 다음 다른 UAC 확인을 요구하지 않고 다른 상승 된 프로세스를 생성 할 수 있습니다. –

+0

내가 가진 유일한 질문은 원격으로 수행 할 수 있다는 것입니다. 이 스크립트는 관리 서버의 여러 서버에서 다른 명령을 실행합니다. 따라서 서버 A (mgmt)는 서버 1, 2 및 3에서 원격으로 명령을 실행합니다. 서버 A에서 프로세스가 상승 된 경우 서버 1, 2 및 3에서 상승 된 상태로 실행됩니까? – Tim

0

This은 사용자가 원격 시스템의 로컬 관리자인지 확인할 필요가있는 것으로 보입니다 (분명히 WMI 전용 임). this에 따르면 레지스트리 키를 변경하여 관리자를위한 원격 로그온에 UAC를 적용하는 것을 중지 할 수 있습니다 (LocalAccountTokenFilterPolicy 검색). 관리자 계정으로 원격으로 powershell/WMI를 사용하는 경우 UAC를 토큰을 필터링하지 않고 비활성화하면 안됩니다.

-3

설정 옵션 "EnableLUA"(DWORD 값) 마이크로 소프트 \ 윈도우 \ HKLM \ 소프트웨어에서 발견 \ CurrentVersion을 정책 \ 시스템 \ 0 재부팅합니다.

이렇게하면 UAC를 문제없이 사용할 수 있습니다. 사용자의 허가 여부에 관계없이 모든 사용자가 할 수 있습니다. Vista UAC가 너무 무서워서 더 나은 (적어도 비스타에서) 그들은 있습니다. Thsi 트릭도 Win7에서 작동합니다.

내 레지스트리 트릭 :

PS으로 즐기고 : 그렇게 나오는 것에 따라 위의 대답에 내 게시물/스레드에 관한 한 지금까지 UAC를 비활성화하는 방법을 보여 의견을 검열한다 (근면 대답했다 제거됨).

+2

나는 그들이 당신이 그것을 의미하는 방식으로 당신을 검열하지 않는다고 생각합니다. 내 생각에 평범한 사용자에게 보안 위험을 줄 수있는 뭔가를 권장합니다. UAC는 어떤 이유로 든 성공했는지 여부에 관계없이이 질문의 범위를 벗어납니다.) – Kounavi

+0

@Kounavi 물론 그렇습니다.이 질문의 범위를 벗어납니다. 그래서 질문에 대답하고 포함 시켰습니다. 사이드 코멘트로 내 다른 의견. 그런 무서운 방법으로 뭔가가 행해지면 개발자에게 교훈을 가르치기 위해 항의하고 장애가 발생해야하며 더 중요한 것은 이것이 제공하는 보안이 제공하는 보안보다 중요하기 때문에 이것이 Vista의 주된 이유 중 하나였습니다 어마 어마한 재앙이었다. –

관련 문제