2009-04-19 35 views
10

मैं सी # का उपयोग कर रहा हूँ ...कॉपी दूरस्थ कंप्यूटर से फ़ाइल दूरस्थ व्यवस्थापक क्रेडेंशियल्स का उपयोग

मैं के बारे में 500 अद्वितीय कंप्यूटरों के लिए फ़ाइलों का सेट नकल करने की क्षमता की जरूरत है। मैं लॉगऑनयूसर() विधि का उपयोग उस डोमेन खाते का प्रतिरूपण करने में सफलतापूर्वक करने में सक्षम हूं जिसमें फ़ाइलों की प्रतिलिपि बनाने के लिए आवश्यक अनुमतियां हैं।

\\ RemoteComputer \ सी $ \ somefolder

मेरे सवालों का है ... वहाँ एक सभी शक्तिशाली डोमेन का उपयोग किए बिना यह करने के लिए एक तरीका है: फ़ाइलों के लिए गंतव्य पथ कुछ की तरह है खाता (ये कंप्यूटर भविष्य में डोमेन में शामिल नहीं हो सकते हैं)? मेरे पास प्रत्येक कंप्यूटर के लिए स्थानीय व्यवस्थापक खाते हैं ... क्या डोमेन खाते की बजाय अपने स्थानीय व्यवस्थापक खाते का उपयोग कर किसी फ़ाइल को कंप्यूटर पर कॉपी करने का एक आसान तरीका है?

उत्तर

7

यदि मैं गलत हूं, तो मुझे सही करें, लेकिन आप स्थानीय समूह का प्रतिरूपण करने के लिए LogonUser का उपयोग भी कर सकते हैं न केवल डोमेन खाते।

From the net:

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 
+1

आप सही हैं। मैं logonType पैरामीटर के लिए एक अलग मान का उपयोग कर रहा था जो काम नहीं कर रहा था ... एक बार जब मैं LOGON32_LOGON_NEW_CREDENTIALS पर स्विच करता हूं तो यह एक चैंप की तरह काम करता है! धन्यवाद! –

+1

मेरा मानना ​​है कि यह केवल तभी काम करता है जब व्यवस्थापक पासवर्ड आपके कंप्यूटर पर चल रहा है, और दूरस्थ कंप्यूटर पर समान है। "LogonUser फ़ंक्शन किसी उपयोगकर्ता को स्थानीय कंप्यूटर पर लॉग ऑन करने का प्रयास करता है। स्थानीय कंप्यूटर वह कंप्यूटर है जिस से लॉगऑनसर को बुलाया गया था। आप दूरस्थ कंप्यूटर पर लॉग ऑन करने के लिए लॉगऑनसर का उपयोग नहीं कर सकते हैं।" –

+0

उपर्युक्त कोड के लिए, LogOnUser फ़ंक्शन में स्थानीय व्यवस्थापक नाम उपयोगकर्ता नाम और स्थानीय कंप्यूटर नाम डोमेन और पासवर्ड के रूप में पासवर्ड के रूप में प्रदान करता है। ये सभी प्रमाण-पत्र गंतव्य मशीन (या सर्वर) हैं। यह काम करेगा। आपका बहुत बहुत धन्यवाद! –

1

WNetAddConnection2 चाल करेगा। एक ड्राइव मैपिंग से बचने के लिए बस स्थानीय डिवाइस नाम के लिए एक खाली स्ट्रिंग का उपयोग करें। जब आप पूरा कर लेंगे तो आप भी सुनिश्चित करना चाहते हैं और close the connection भी बनाना चाहते हैं। मैं इसे नेटवर्ककनेक्शन क्लास में लपेटता हूं जो IDISposable लागू करता है।

संबंधित मुद्दे