C# 使用远程管理员凭据将文件复制到远程计算机

C# 使用远程管理员凭据将文件复制到远程计算机,c#,.net,copy,remote-access,C#,.net,Copy,Remote Access,我正在使用C# 我需要将一组文件复制到大约500台独特的计算机上的能力。我已经成功地使用LogonUser()方法模拟了具有复制文件所需权限的域帐户。文件的目标路径类似于: \\RemoteComputer\C$\SomeFolder 我的问题是…有没有一种方法可以做到这一点而不必使用万能的域帐户(这些计算机将来可能不会加入域)?我有每台计算机的本地管理员帐户…有没有一种简单的方法可以使用文件的本地管理员帐户而不是域帐户将文件复制到计算机上?就可以了。只需使用空字符串作为本地设备名称,以避免映射

我正在使用C#

我需要将一组文件复制到大约500台独特的计算机上的能力。我已经成功地使用LogonUser()方法模拟了具有复制文件所需权限的域帐户。文件的目标路径类似于:

\\RemoteComputer\C$\SomeFolder


我的问题是…有没有一种方法可以做到这一点而不必使用万能的域帐户(这些计算机将来可能不会加入域)?我有每台计算机的本地管理员帐户…有没有一种简单的方法可以使用文件的本地管理员帐户而不是域帐户将文件复制到计算机上?

就可以了。只需使用空字符串作为本地设备名称,以避免映射驱动器。你还需要确定你完成的时间和地点。我将其包装到一个实现IDisposable的NetworkConnection类中。

如果我错了,请纠正我的错误,但您可以使用它来模拟本地组,而不仅仅是域帐户

导入系统
导入System.Runtime.InteropServices
导入System.Security.Principal
导入System.Security.Permissions
公开课表格1
_ 
公共共享函数LogonUser(ByVal lpszUsername作为字符串,ByVal lpszDomain作为字符串,\u
ByVal LPSZ密码为字符串,ByVal dwLogonType为整数,ByVal dwLogonProvider为整数,\u
ByRef phToken作为IntPtr)作为整数
端函数
私有子按钮1\u单击(ByVal sender作为System.Object,ByVal e作为System.EventArgs)处理按钮1。单击
Dim admin_令牌作为IntPtr
Dim wid_当前为WindowsIdentity=WindowsIdentity.GetCurrent()
作为WindowsIdentity的Dim wid_管理员=无
作为WindowsImpersonationContext的Dim wic=无
尝试
显示(“正在复制文件…”)
如果LogonUser(“本地管理员名”、“本地计算机名”、“pwd”、9、0、管理员令牌)0,则
wid_admin=新的WindowsIdentity(管理员令牌)
wic=wid_admin.Impersonate()
System.IO.File.Copy(“C:\right.bmp”,“\\157.60.113.28\testnew\right.bmp”,True)
MessageBox.Show(“复制成功”)
其他的
MessageBox.Show(“复制失败”)
如果结束
捕获se作为系统异常
Dim ret As Integer=Marshal.GetLastWin32Error()
MessageBox.Show(ret.ToString(),“错误代码:”+ret.ToString())
MessageBox.Show(se.Message)
最后
如果wic不是什么,那么
wic.Undo()
如果结束
结束尝试
端接头
末级

你是对的。我对logonType参数使用了不同的值,但该参数不起作用…一旦我切换到LOGON32\u LOGON\u NEW\u凭据,它就会像champ一样工作!谢谢我相信,只有在您正在运行的计算机和远程计算机上的管理员密码相同的情况下,这才有效。“LogonUser函数尝试将用户登录到本地计算机。本地计算机是调用LogonUser的计算机。您不能使用LogonUser登录到远程计算机。”对于上述代码,在LogonUser函数中,提供本地管理员名作为用户名,本地计算机名作为域,密码作为密码。所有这些凭据都是目标计算机(或服务器)。它将正常工作。谢谢!
Imports System 
Imports System.Runtime.InteropServices 
Imports System.Security.Principal 
Imports System.Security.Permissions 
Public Class Form1 
    <DllImport("advapi32.DLL", SetLastError:=True)> _ 
    Public Shared Function LogonUser(ByVal lpszUsername As String, ByVal lpszDomain As String, _ 
        ByVal lpszPassword As String, ByVal dwLogonType As Integer, ByVal dwLogonProvider As Integer, _ 
        ByRef phToken As IntPtr) As Integer 
    End Function 
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
        Dim admin_token As IntPtr 
        Dim wid_current As WindowsIdentity = WindowsIdentity.GetCurrent() 
        Dim wid_admin As WindowsIdentity = Nothing 
        Dim wic As WindowsImpersonationContext = Nothing 
        Try 
            MessageBox.Show("Copying file...") 
            If LogonUser("Local Admin name", "Local computer name", "pwd", 9, 0, admin_token) <> 0 Then 
                wid_admin = New WindowsIdentity(admin_token) 
                wic = wid_admin.Impersonate() 
                System.IO.File.Copy("C:\right.bmp", "\\157.60.113.28\testnew\right.bmp", True) 
                MessageBox.Show("Copy succeeded") 
            Else 
                MessageBox.Show("Copy Failed") 
            End If 
        Catch se As System.Exception 
            Dim ret As Integer = Marshal.GetLastWin32Error() 
            MessageBox.Show(ret.ToString(), "Error code: " + ret.ToString()) 
            MessageBox.Show(se.Message) 
        Finally 
            If wic IsNot Nothing Then 
                wic.Undo() 
            End If 
        End Try 
    End Sub 
End Class