2010-07-20 7 views
9

Quiero conectarme a una PC remota que ejecute Windows 7, desde otra PC usando ManagementScope en una red local. En una PC remota, he creado una nueva cuenta de usuario "Samuel" sin contraseña y configurada como administrador.Conexión WMI remota

ConnectionOptions options = new ConnectionOptions(); 
options.Username = "Samuel"; 
options.Password = ""; 

ManagementScope scope = new ManagementScope("\\\\192.168.0.2\\root\\cimv2", options);   
scope.Connect(); 

El error que consigo:

Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))

Actualización:
Después de establecer una contraseña para el uso, consigo nuevo error:

+0

Si entra en Servicios, ¿se está ejecutando el servicio WMI? y si es así, si ejecuta el código anterior en el equipo con Windows 7 de destino, ¿puede conectarse a WMI? – etoisarobot

+0

El servicio WMI se está ejecutando allí. ¿Y sobre ejecutar este código en el objetivo, te refieres a ejecutarlo localmente? en caso afirmativo, no puedo ejecutar el código en esa máquina.(no hay VS o framework) – shlomjmi

+0

¿* Samuel * es un dominio o una cuenta local? – Helen

Respuesta

1

¿Seguro que puede hacer conexiones WMI remotas a cuentas sin contraseñas?

Hay una cantidad de cosas que tales cuentas no pueden hacer (compartir archivos, escritorio remoto, por ejemplo). Intente establecer una contraseña y vea si eso hace la diferencia.

+0

Después de establecer una contraseña, aparece este error ": El servidor RPC no está disponible. (Excepción de HRESULT: 0x800706BA) – shlomjmi

8

Tal vez sea el 'EnablePrivileges' faltantes:

scope.Options.EnablePrivileges = true; 

De MSDN (ConnectionOptions.EnablePrivileges Property):

Gets or sets a value indicating whether user privileges need to be enabled for the connection operation. This property should only be used when the operation performed requires a certain user privilege to be enabled (for example, a machine restart).

Editar: Si esto no funciona, intente configurar el ImpersonationLevel a 'Suplantar' :

scope.Options.Impersonation = System.Management.ImpersonationLevel.Impersonate; 

ImpersonationLevel Impersonate: Impersonate-level COM impersonation level that allows objects to use the credentials of the caller. This is the recommended impersonation level for WMI calls.

+1

Intentar entender qué" requiere que se habilite un cierto privilegio de usuario "significa. Para mí, cualquier conexión WMI requeriría alguna tipo de privilegio. ¿Alguien tiene más información sobre qué operaciones necesitaría este conjunto de propiedades? –

+0

cambiar la 'Autoridad' a mi dominio en lugar de" DOMINIO "funcionó para mí – Maslow

6
  • De acuerdo con la WMI FAQ en TechNet, el error 0x80070005 indica un problema de DCOM:

    0x80070005 (DCOM ACCESS_DENIED)
    This error occurs when the connected user is not recognized or is restricted in some fashion by the remote server (for example, the user might be locked out). This happens most often when accounts are in different domains. Recent changes to WMI security can also cause this error to occur:

    • Blank passwords, formerly permitted, are not allowed in Windows XP and Windows Server 2003.

    • WMI does not allow asynchronous callbacks to a Windows 98 client. A call like SWbemServices.ExecNotificationQueryAsync from a Windows 98 computer to a Windows XP computer will result in an Access Denied error returned to the Windows 98 machine.

    • The DCOM configuration access setting might have been changed.

    • If the target computer is running Windows XP, the Forceguest value under the registry key HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa might be set to force the Guest account off (value is zero).

    (. Aunque Windows XP se ha mencionado, esto puede ser aplicado a Windows 7 también)

  • error

    El 0x800706ba en su rurn, indica un problema de cortafuegos:

    0x800706xx (DCOM RPC error)
    This often occurs when a firewall is configured on the remote computer. You will need to open the appropriate ports on the firewall to permit remote administration using DCOM.

    Intente habilitar Administración remota excepción en Windows Firewall en la computadora remota y vea si esto ayuda. Para hacerlo desde la línea de comandos, ejecute el siguiente comando en el símbolo del sistema elevado:

    netsh advfirewall firewall set rule group="remote admin" new enable=yes 
    


    También puede encontrar el DCOM, UAC, Firewall de Windows y otros ajustes requeridos para el acceso remoto de WMI en el artículo Connecting to WMI Remotely Starting with Windows Vista en MSDN.

  • Además, dado que Samuel es una cuenta no sea de dominio, es necesario conceder a esta cuenta DCOM acceso remoto, Ejecución remota y activación remota permisos en el equipo remoto como se describe here.

+0

como comenté la respuesta anterior: Después de establecer una contraseña i obtener este error ": el servidor RPC no está disponible. (Excepción de HRESULT: 0x800706BA) – shlomjmi

+0

@shlomjmi: Intente habilitar la * excepción de administración remota * en Firewall de Windows en la computadora remota y vea si ayuda. (Vea la respuesta actualizada.) – Helen

0

Intente agregar el nombre de dominio o computadora antes del nombre de usuario (por ejemplo, @ "mshome \ Samuel").

+0

mire la respuesta de jerry y el comentario debajo – prabhakaran

+0

@prabhakaran: es una pregunta un tanto vieja pero recuerdo que resolví un problema similar simplemente agregando el nombre de dominio antes del nombre de usuario pero era mi caso particular – SKINDER

1

Es posible que desee comprobar a la configuración de seguridad de WMI en el PC con Windows 7 remoto. Haga clic con el botón derecho en Computer> Manage> Services and Applications> WMI Control> Security Tab y asegúrese de que la cuenta de usuario que está utilizando tiene los permisos necc.

+0

Yo don No tengo esa opción allí ... – shlomjmi

5

Tienes "Acceso denegado". porque no puede consultar la conexión del alcance solo con nombre de usuario. Tienes 2 opciones: null para nombre de usuario y contraseña o ingresa nombre de usuario y contraseña.

Tienes "El servidor RPC no está disponible". porque el firewall no le permite consultar esa máquina. Tiene 2 opciones: desactivar el firewall o agregar una excepción de administración remota.

Puede agregar excepción de firewall como este en cmd: más antiguas versiones de Windows:

netsh firewall set service type = remoteadmin mode = enable

ventanas nuevas versiones:

netsh advfirewall firewall set rule group="Windows Remote Management" new enable=yes

Si intenta iniciar sesión con el usuario de dominio, cambiar nombre de usuario para domainName\username o establecer la propiedad de conexión connection.Authority = "ntlmdomain:domainName".

1

No estoy seguro de si es denegado porque el motor WMI no está escuchando en la máquina remota, o si tiene otros problemas de inicio de sesión/conexión.

Aquí está el código que utilicé para conectar a mi máquina remota, y está funcionando perfectamente. Tal vez le ayudará a:

ConnectionOptions oConn = new ConnectionOptions(); 
ManagementScope oScope = null; 

oConn.Username = txtLogin; 
oConn.Password = txtPassword; 
oConn.Authority = "ntlmdomain:" + txtDomain; 

oScope = new ManagementScope("\\\\" + txtHostName + "\\root\\CIMV2", oConn); 

oScope.Connect(); 

Si se aceptan mi dominio/nombre de usuario/contraseña trío, a continuación, Conectar() va a funcionar. De lo contrario, Connect() arroja una excepción. Siempre que las credenciales especificadas tengan permiso en esa máquina, debe estar apagado y funcionando.

+3

Tuve dos problemas: 1) Copié el ejemplo de Microsoft y tenía "ntlmdomain: DOMAIN", no me di cuenta de que tenía que poner mi dominio allí (duh). 2) Puse mi dominio en el usuario, que no es permisivo. Puse user = "mydomain \ myuser", pero debería ser user = "myuser". – NealWalters

0

solución con "net view \\ ServerName"

Yo sé que no es muy conveniente utilizar un comando de consola y hacer algún trabajo de cadena de gimnasia en la salida, pero por el contrario lo hace y es tampoco es muy deseable, al menos para mí, tener que perder el tiempo con la configuración predeterminada de DCOM para obtener el modo WMI para funcionar (al menos en Win7s).

Ha sido probado en clientes Win7 y XP y en servidores MS y Linux.

Function GetShares(ServerName As String) As List(Of String) 
    Try 
     Dim P As New Process 
     Dim Read As Boolean = False 
     Dim Str As String 
     Dim Shares As New List(Of String) 

     With P.StartInfo 
      .FileName = "net" 
      .Arguments = "view " & ServerName 
      .RedirectStandardOutput = True 
      .RedirectStandardError = True 
      .CreateNoWindow = True 
      .UseShellExecute = False 
     End With 
     P.Start() 
     P.WaitForExit() 

     If P.ExitCode <> 0 Then 
      MsgBox(P.StandardError.ReadToEnd, MsgBoxStyle.OkOnly, "Error") 
     Else 
      Do Until P.StandardOutput.EndOfStream = True 
       If Read = True Then 
        Str = P.StandardOutput.ReadLine 
        If Str = "The command completed successfully." Then Exit Do 
        Str = Strings.RTrim(Str) 'Removes any trailing spaces 
        Str = Strings.Mid(Str, 1, Strings.InStrRev(Str, " ")) 'remove Type 
        Str = Strings.RTrim(Str) ''Removes any trailing spaces 
        Shares.Add(Str) 
       Else 
        If Strings.Left(P.StandardOutput.ReadLine, 10) = "----------" Then Read = True 
       End If 
      Loop 
     End If 
     Return Shares 
    Catch ex As Exception 
     MsgBox("Error in """ & System.Reflection.MethodInfo.GetCurrentMethod.Name & """: " & vbCr & ex.Message, MsgBoxStyle.OkOnly, "Runtime error") 
     Debug.Print("--------------------------" & vbCr & "Error: " & ex.Message & vbCr & ex.StackTrace) 
     Return Nothing 
    End Try 
End Function 
0

he tenido este problema también.yo intentaba escribir código C# para obtener información y archivos WMI desde un PC remoto. Y funcionó en dos Access Denied errores:

Para no hacer la historia corta, tuve que hacer cambios en la PC remota. Consulte a continuación:

  1. 0x80070005: Access is Denied: https://social.msdn.microsoft.com/Forums/vstudio/en-US/6229334e-d5ef-4016-9e7e-1c8718be8d43/access-is-denied-exception-from-hresult-0x80070005-eaccessdenied-in-vbnet?forum=netfxbcl

  2. System.Management: Access Denied: Section "Using System.Management and WMI": https://support.microsoft.com/en-us/help/317012/process-and-request-identity-in-asp.net

Cuestiones relacionadas