2017-11-06 57 views
1

Microsoft.Management.Infrastructure 네임 스페이스를 사용하여 원격 컴퓨터에 연결하여 WMI 정보를 가져와 작동합니다. 그러나 비 도메인 PC에 연결하려고하면 작동하지 않습니다. 누구든지 내가 뭘 잘못하고 있는지 정확히 지적 해 줄 수 있나. 내가 로컬 컴퓨터에 대한 도메인 및 사용자 이름 PARAMATERS으로 취할 것을 확실하지 않다WMI에 연결 도메인이 아닌 PC에 C#을 사용하여 원격으로 작동하지 않음

string computer = "Computer_B"; 
string domain = "WORKGROUP"; 
string username = ".\\LocalAdminUserName"; 
string plaintextpassword; 

Console.WriteLine("Enter password:"); 
plaintextpassword = Console.ReadLine(); 

SecureString securepassword = new SecureString(); 
foreach (char c in plaintextpassword) 
{ 
    securepassword.AppendChar(c); 
} 

CimCredential Credentials = new 
CimCredential(PasswordAuthenticationMechanism.Default, domain, 
username,securepassword); 

WSManSessionOptions SessionOptions = new WSManSessionOptions(); 
SessionOptions.AddDestinationCredentials(Credentials); 

CimSession Session = CimSession.Create(computer, SessionOptions); 

var allVolumes = Session.QueryInstances(@"root\cimv2", "WQL", "SELECT * FROM Win32_LogicalDisk"); 

// Loop through all volumes 
foreach (CimInstance oneVolume in allVolumes) 
{ 
     Console.Writeline(oneVolume.CimInstanceProperties["SystemName"].Value.ToString()); 
} 

: 다음은 코드입니다. 이미 수행 한/다음 tryed : 원격 로컬 컴퓨터에

  • 실행 WinRM이의은 QuickConfig을 나는 Kerberos를 읽고

  • 사용 PasswordAuthenticationMechanism.Negotiate 원인 도메인 사용자 및 암호


  • 작품
  • 컴퓨터를 추가했습니다. winrm config를 사용하여 로컬 컴퓨터의 TrustedHosts에 코드를 실행했습니다. 또한 TrustedHosts에 *를 추가하려고 시도했습니다.

  • username = "computer_B \ LocalAdminUserName"에 사용됩니다. 나는 도메인 = ""으로도 시도했습니다

내가 뭘 잘못하고 있는거야?

계속 오류가 발생합니다. WinRM에서 요청을 처리 할 수 ​​없습니다. 협상 인증을 사용하는 동안 오류 코드 0x8009030e가있는 다음 오류가 발생했습니다. 지정한 로그온 세션이 없습니다. 이미 해지되었을 수 있습니다.
제공된 자격 증명이 대상 서버에서 유효하지 않거나 서버 ID를 확인할 수없는 경우에 발생할 수 있습니다. 서버 ID를 신뢰하는 경우 TrustedHosts 목록에 서버 이름을 추가 한 다음 요청을 다시 시도하십시오. winrm.cmd를 사용하여 TrustedHosts 목록을 보거나 편집합니다. TrustedHosts 목록에있는 컴퓨터는 인증되지 않을 수 있습니다. TrustedHosts 목록을 편집하는 방법에 대한 자세한 내용은 winrm help config 명령을 실행하십시오.

답변

0

아래 코드를 시도해보십시오.이 방법은 가장 논리에 사용됩니다.

ConnectionOptions cOption = new ConnectionOptions(); 
       ManagementScope scope = null; 
       Boolean isLocalConnection = isLocalhost(machine); 

       if (isLocalConnection) 
       { 
        scope = new ManagementScope(nameSpaceRoot + "\\" + managementScope, cOption); 
       } 
       else 
       { 
        scope = new ManagementScope("\\\\" + machine + "\\" + nameSpaceRoot + "\\" + managementScope, cOption); 
       } 

       if (!String.IsNullOrEmpty(ACTIVE_DIRECTORY_USERNAME) && !String.IsNullOrEmpty(ACTIVE_DIRECTORY_PASSWORD) && !isLocalConnection) 
       { 
        scope.Options.Username = ACTIVE_DIRECTORY_USERNAME; 
        scope.Options.Password = ACTIVE_DIRECTORY_PASSWORD; 
       } 
       scope.Options.EnablePrivileges = true; 
       scope.Options.Authentication = AuthenticationLevel.PacketPrivacy; 
       scope.Options.Impersonation = ImpersonationLevel.Impersonate; 
       scope.Connect();