Bonjour,
Peut-on logger un utilisateur directement depuis powerhshell ?
Merci d'avance pour les réponses. :ccool:
Version imprimable
Bonjour,
Peut-on logger un utilisateur directement depuis powerhshell ?
Merci d'avance pour les réponses. :ccool:
Salut,
peux-tu préciser ?
Oui je peux :), je voudrais faire un script qui vérifie si un user est logé sur une machine. Si ce n'est pas le cas, le script ouvrirait une session pour cet utilisateur.
En gros je voudrais juste rendre active une session pour un utilisateur donné.
Peut être avec l'api Win32 LogonUser, mais je n'ai pas testé.
Salut Laurent,
J'ai réussi à faire l'appelle à la fonction LogonUser :ccool:.
J'ai bien le token en output qui me prouve que tout c'est bien passé.
Par contre quand je fais des traitements qui demande que le user en question soit logé, ce ne marche pas :(.
J'ai pu remarqué que même si la fonction est appelée correctement, l'utilisateur n'apparaît pas dans le gestionnaire de tâches sous l'onglet "Utilisateurs".
Quelqu'un aurait une idée de se qui cloche ?
Merci d'avance :).
Alors alors :) personne n'a de solution ? :cry:
Voici ma class de login. Comme déjà di elle marche correctement enfin il me semble... par contre dès que je lance des traitements qui ont besoin que le user en question soit logé, les traitements s'arrêtent comme si l'utilisateur n'était pas logé.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54 public class Login { [DllImport("advapi32.dll", SetLastError = true)] public static extern bool LogonUser( string lpszUsername, string lpszDomain, string lpszPassword, int dwLogonType, int dwLogonProvider, out IntPtr phToken); [DllImport("advapi32.dll", SetLastError = true)] public extern static bool DuplicateToken( IntPtr ExistingTokenHandle, int SECURITY_IMPERSONATION_LEVEL, out IntPtr DuplicateTokenHandle); [DllImport("kernel32", CharSet = CharSet.Auto, SetLastError = true, ExactSpelling = true)] internal static extern int CloseHandle(IntPtr hObject); const int LOGON32_PROVIDER_DEFAULT = 0; const int LOGON32_LOGON_INTERACTIVE = 2; const int LOGON32_LOGON_NETWORK = 3; const int LOGON32_LOGON_BATCH = 4; const int LOGON32_LOGON_SERVICE = 5; const int LOGON32_LOGON_UNLOCK = 7; const int LOGON32_LOGON_NETWORK_CLEARTEXT = 8; const int LOGON32_LOGON_NEW_CREDENTIALS = 9; IntPtr hToken; IntPtr hTokenDuplicate; WindowsIdentity windowsIdentity; WindowsImpersonationContext impersonationContext; public Login(string user, string domain, string password) { if (LogonUser(user, domain, password, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, out hToken)) { if (DuplicateToken(hToken, 2, out hTokenDuplicate)) { windowsIdentity = new WindowsIdentity(hTokenDuplicate); impersonationContext= windowsIdentity.Impersonate(); } } } public void LogOffUser() { impersonationContext.Undo(); if (hToken != IntPtr.Zero) CloseHandle(hToken); if (hTokenDuplicate != IntPtr.Zero) CloseHandle(hTokenDuplicate); } }
Voilé merci d'avance !