perl - Hvordan laver man en proces som en anden bruger på Windows?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har et Perl script og jeg skal køre det som en anden bruger på den lokale boks. Det er en testmaskine, så ingen reel sikkerhed, jeg ville bruge hammer, hvis det fungerede.


Det jeg har prøvet så langt er


$cmd = 'runas /user:tester01 "perl delegated.pl"';
system($cmd) == 0
    or die "could not spawn process as tester01: $!";


men det virker ikke: det spørger om adgangskode interaktivt. (Piping echo password i runas mislykkedes også.)


Hvordan skal jeg opnå det inden for Perl script? Eller skal jeg gøre noget andet før den system "runas..." del?


Jeg ved, at jeg kan bruge PsExec, men jeg foretrækker Windows native løsning. I øjeblikket er de felter, den skal fungere på, Windows 7 og Windows XP, men andre Windows OS kan tilføjes senere.

Bedste reference


Hvis du ikke vil spille med WinAPI for at sende en adgangskode til den hylede shell (for eksempel Win32 :: GuiTest SendKeys-metoden kan være nyttigt), så bruger du bedre PsExec. ) Denne tråd er lidt gammel, men det beskriver stadig Microsoft-politikken ganske godt, tror jeg. [13] [14]

Andre referencer 1


Her er hvordan din kode ville gå:


use strict;
use warnings;
use Win32::GuiTest qw[ SendKeys ];

system 1, q[runas /user:machinenameusername "perl scriptname.pl"];

SendKeys( 'password~');


Se Win32 :: GuiTest dokumentation for flere detaljer om SendKeys (). [15]

Andre referencer 2


Jeg tror du vil have


system($cmd) == 0
    or die "could not spawn process as tester01: $!";


I din kode vil $cmd==0 evaluere til 1, da $cmd vil konvertere til nummer 0 og 0==0, så vil system blive bestået 1 og forsøge at køre det som en kommando.


Du skulle use warnings; det have rapporteret et problem, da $cmd blev implicit konverteret til et nummer.