2010-08-17 6 views
1

Использование Flex 4/Air 2.0.3прогибается воздух приложение - Получить пользователь домена AD

Можно ли получить активное доменное имя каталога, связанное с зарегистрированным пользователем?

Эта страница (Get the current logged in OS user in Adobe Air) показывает, что имя пользователя может быть выведено из имени папки каталога пользователя, однако есть ли способ получить доменное имя? (Предполагается, что пользователь является частью домена!)

Предполагая, что я являюсь частью домена «офис», и мой логин «j.jones», я хочу получить как «j.jones», так и «офисные» части.

Спасибо,

Jonsie

ответ

0

AIR 2.0 позволяет запускать собственные процессы и читать их стандартный вывод. Итак, если на вашем компьютере установлены инструменты консоли AD, вы можете запустить dsget user из AIR и получить результат. Кроме того, вы можете использовать инструменты с вашей программой (у меня были созданные дистрибутивы AIR в комплекте с java runtime).

+0

Звучит здорово, но я не хотел бы, чтобы полагаться на них является установлен. Но дает мне отличную идею - если я прочитаю вывод «echo% USERDOMAIN%», я могу получить это значение без внешних депо ... Любая идея эквивалента на nix/mac? –

+0

uname или hostname? Я не настолько силен в сценарии linux, но должно быть что-то. – alxx

+0

Оба будут замечательными, хотя имя домена идеально, так как в худшем случае имя пользователя может быть выведено из имени папки каталога пользователя. В любом случае, я считаю, что этот подход является победителем! –

0

У меня сделать этот класс:

public class UserDomainWindows extends EventDispatcher 
{ 
    public static const EVENT_COMPLETE:String = "complete"; 

    private var process:NativeProcess; 
    private var file:File; 

    public function UserDomainWindows() 
    { 

    } 

    public function get():void { 
     file = File.applicationStorageDirectory.resolvePath("_getuserdomain.cmd"); 
     var fs:FileStream = new FileStream(); 
     fs.open(file, FileMode.WRITE); 

     fs.writeUTFBytes("@echo off\r\n"); 
     fs.writeUTFBytes("echo %username%\r\n"); 
     fs.writeUTFBytes("echo %userdomain%"); 

     fs.close(); 
     getCurrentOSUser(); 
    } 

    private function getCurrentOSUser():void 
    {  
     var nativeProcessStartupInfo:NativeProcessStartupInfo = new NativeProcessStartupInfo(); 
     nativeProcessStartupInfo.executable = file; 

     process = new NativeProcess();  
     process.addEventListener(ProgressEvent.STANDARD_OUTPUT_DATA, onOutputData); 
     process.start(nativeProcessStartupInfo); 
    } 

    private function onOutputData(event:ProgressEvent):void 
    {   
     var output:String = process.standardOutput.readUTFBytes(process.standardOutput.bytesAvailable); 
     file.deleteFile(); 
     var sz:Array = output.split("\r\n"); 
     this.dispatchEvent(new UserDomainWindowsEvent("complete", sz[0], sz[1])); 
    } 
} 

и этот класс событий:

public class UserDomainWindowsEvent extends Event 
{ 
    public var username:String; 
    public var userdomain:String; 

    public function UserDomainWindowsEvent(type:String, username:String, userdomain:String, bubbles:Boolean=false, cancelable:Boolean=false) 
    { 
     super(type, bubbles, cancelable); 
     this.userdomain = userdomain; 
     this.username = username; 
    } 

    public override function clone():Event 
    { 
     return new UserDomainWindowsEvent(type, this.username, this.userdomain, bubbles, cancelable); 
    } 

    public override function toString():String 
    { 
     return formatToString("UserDomainWindowsEvent", "type", "username", "userdomain", "bubbles", "cancelable", "eventPhase"); 
    } 

} 

пример:

public function Main():void 
    { 
     var ud:UserDomainWindows = new UserDomainWindows(); 
     ud.addEventListener(UserDomainWindows.EVENT_COMPLETE, onGetUserDomain); 
     ud.get(); 
    } 

    private function onGetUserDomain(e:UserDomainWindowsEvent):void { 
     trace("username: " + e.username); 
     trace("userdomain: " + e.userdomain); 

    } 
Смежные вопросы