Windows 2003, 2008 및 2008r2 서버가있는 네트워크가 있습니다. “Microsoft.Update”com 개체를 사용하여 로컬 컴퓨터를 패치하기 위해 작성한 powershell 스크립트가 있습니다. ( Windows Update PowerShell Remoting과 유사합니다 .) 스크립트는 로컬에서 훌륭하게 작동하지만 관리 할 서버가 많으므로 원격으로 해당 기능을 사용하고 싶습니다. 이 경우에는 해결되지 않은 다른 게시물과 유사하게 떨어집니다.
그러나 특정 클래스에서 두 가지 방법으로 실패 범위를 좁힐 수있었습니다.
(New-Object -ComObject "Microsoft.Update.Session").CreateUpdateDownloader()
(New-Object -ComObject "Microsoft.Update.Session").CreateUpdateInstaller()
Powershell에서 로컬로 관리자 권한으로 실행하면 아무런 문제가 없습니다. invoke-command (또는 enter-session 또는 winrs)를 사용하려고하면 다음 오류가 발생합니다. (이것은 localhost로 테스트 중이지만 모든 호스트가 수행합니다. credssp 및 kerberos와 같은 다른 인증 방법으로 시도했습니다.);
PS C:\> Invoke-Command -ComputerName localhost -ScriptBlock { (New-Object -ComObject "microsoft.update.session").createUpdateDownloader()}
Exception calling "CreateUpdateDownloader" with "0" argument(s): "Access is denied. (Exception from HRESULT: 0x80070005
(E_ACCESSDENIED))"
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : ComMethodTargetInvocation
나는 이것이 블로그에서 버그로 언급 된 것을 보았지만 그 주장을 뒷받침하지는 않았다. 두 가지 해결 방법이 있으며 둘 다 나를 행복하게하지 않습니다.
- psexec를 사용하여 시스템 사용자로 명령을 실행하십시오. PSExec은 신뢰할 수없는 것으로 판명되었으므로 사용하지 않으려 고합니다. 또한 순수한 powershell 솔루션을 원합니다.
- 예약 된 작업을 작성하고 시스템 사용자로 스크립트를 실행하도록 지시하십시오. ( 그의 게시물을 통해 ) 이것은 지저분 할뿐만 아니라 업데이트 결과를 얻지 못합니다. 파일에 로그인하거나 데이터베이스 등을 업데이트해야합니다.
호스트에서 원격으로 업데이트를 실행하는 다른 방법이 열려 있습니다. 많은 사람들이 겪고있는 문제인 것 같습니다.
메시지를 설명하지만 그 이유나 해결 방법이 아닌 일부 문서 를 찾았습니다 .
반환 값 성공하면 S_OK를 반환합니다. 그렇지 않으면 COM 또는 Windows 오류 코드를 반환합니다.
This method can also return the following error codes. Return code Description E_INVALIDARGA parameter value is invalid. E_ACCESSDENIED This method cannot be called from a remote computer.
내가 원격 컴퓨터에 있다는 것을 어떻게 알 수 있습니까?
답변
MS는 WUApi를 통해 할 수 없기 때문에 친구는 할 수 없습니다.
자세한 내용은 여기를 참조하십시오 : http://msdn.microsoft.com/en-us/library/windows/desktop/aa387288(v=vs.85).aspx
예약 된 작업을 사용하여이 작업을 수행 할 수 있습니다.
답변
이러한 명령은 원격 시스템에서 권한을 가지고 실행해야하며, 원격 시스템에서 도메인 관리자 또는 관리자로 실행해야합니다.
첫 번째 경우 도움이 없지만 원격 get-credential
이 아닌 로컬 관리자만 이처럼 사용 하십시오.
$cred = get-credential
Invoke-Command -ComputerName localhost -credential $cred -scriptblock {}
대체적이고보다 직접적인 양식은 Invoke-Command
자격 증명을 요청하는 것입니다.
Invoke-Command -scriptblock {$ENV:username} -Credential ""
답변
원격 서버에서 로컬 가상 계정으로 실행되도록 JEA 끝점을 설정하여이 작업을 수행 할 수있었습니다.
에서 https://docs.microsoft.com/en-us/powershell/jea/session-configurations :
로컬 가상 계정
이 JEA 끝점에서 지원하는 역할이 모두 로컬 컴퓨터를 관리하는 데 사용되고 로컬 관리자 계정으로 명령을 성공적으로 실행하기에 충분하면 로컬 가상 계정을 사용하도록 JEA를 구성해야합니다. 가상 계정은 특정 사용자에게 고유 한 임시 계정으로 PowerShell 세션 기간 동안 만 지속됩니다. 구성원 서버 또는 워크 스테이션에서 가상 계정은 로컬 컴퓨터의 Administrators 그룹에 속하며 대부분의 시스템 리소스에 액세스 할 수 있습니다. Active Directory 도메인 컨트롤러에서 가상 계정은 도메인의 Domain Admins 그룹에 속합니다.