私はC#を使用しています...
ファイルのセットを約500台の固有のコンピューターにコピーする機能が必要です。 LogonUser()メソッドを使用して、ファイルをコピーするために必要なアクセス許可を持つドメインアカウントを偽装することができました。ファイルの宛先パスは次のようになります。
\\ RemoteComputer\C $\SomeFolder
私の質問は...強力なドメインアカウントを使用せずにこれを行う方法はありますか(これらのコンピューターは将来ドメインに参加しない可能性があります)?すべてのコンピューターのローカル管理者アカウントを持っています...ドメインアカウントではなくローカル管理者アカウントを使用してファイルをコンピューターにコピーする簡単な方法はありますか?
私が間違っている場合は訂正してください。ただし、 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
WNetAddConnection2 でうまくいきます。ドライブのマッピングを回避するために、ローカルデバイス名に空の文字列を使用するだけです。また、完了したら 接続を閉じる を確認する必要があります。 IDisposableを実装するNetworkConnectionクラスにラップします。