2010-08-17 67 views
1

使用Flex 4/Air 2.0.3flex air app - 獲取用戶的AD域

是否可以獲取與登錄用戶關聯的活動目錄域名?

此頁面(Get the current logged in OS user in Adobe Air)顯示用戶名稱可以從用戶目錄文件夾名稱中推斷出來,但是有沒有辦法獲取域名? (這是假設用戶是域的一部分!)

假設我是域「辦公室」的一部分,我的登錄名是「j.jones」,我想要檢索「j.jones」和「辦公室」部分。

謝謝

Jonsie

回答

0

AIR 2.0是能夠運行本機進程,並閱讀他們的標準輸出。因此,如果您的計算機安裝了AD控制檯工具,則可以從AIR運行dsget用戶並讀取結果。另外,你可以在你的程序中使用工具(我已經創建了與Java運行時捆綁在一起的AIR distribs)。

+0

聽起來不錯,但我討厭依靠這些是安裝。但給了我一個好主意 - 如果我讀了「echo%USERDOMAIN%」的輸出,我可以在沒有外部代碼的情況下獲得這個值....任何關於'nix/mac上的等價物的想法? – 2010-08-17 13:08:14

+0

uname或主機名?我在Linux腳本中並不那麼強大,但應該有一些東西。 – alxx 2010-08-17 13:16:52

+0

兩者都很好,儘管域名理想,但最壞的情況下,用戶名可以從用戶目錄文件夾名稱中推斷。 無論哪種方式,我覺得這種方法是贏家! – 2010-08-17 13:21:40

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); 

    }