2013-04-25 69 views
5

我已經創建了基於Active-Directory模塊一個登錄腳本編譯,以便查詢用戶組成員以自己的映射驅動器等PowerShell的 - 與模塊

我與PowerGUI的編譯它,創造一個EXE文件。 問題是,該模塊在用戶計算機上不存在。

有沒有辦法做到這一點,沒有模塊,或將模塊添加到編譯?

+0

的輸出爲什麼不從你的DC或\\域\ SYSVOL給他們打電話? – 2013-04-26 02:22:07

回答

2

對於組成員,你也可以得到它沒有連接到AD,並解析WHOAMI工具

$groups = WHOAMI /GROUPS /FO CSV | ConvertFrom-Csv | Select-Object -ExpandProperty 'Group Name' 

if($groups -contains 'group1') 
{ 
    do something 
} 
1

一種方法是使用Active-Directory服務接口(ADSI)

你可以在其他SO帖子(Can I match a user to a group accross different domains?)中找到一種方法來查找用戶所屬的所有組,使用ADSI,它是一個C#代碼,但它很容易翻譯。

這是一個簡單搜索開始的小例子。

Clear-Host 
$dn = New-Object System.DirectoryServices.DirectoryEntry ("LDAP://WM2008R2ENT:389/dc=dom,dc=fr","[email protected]","Pwd") 

# Look for a user 
$user2Find = "user1" 
$Rech = new-object System.DirectoryServices.DirectorySearcher($dn) 
$rc = $Rech.filter = "((sAMAccountName=$user2Find))" 
$rc = $Rech.SearchScope = "subtree" 
$rc = $Rech.PropertiesToLoad.Add("mail"); 

$theUser = $Rech.FindOne() 
if ($theUser -ne $null) 
{ 
    Write-Host $theUser.Properties["mail"] 
} 

另一種方法是使用System.DirectoryServices.AccountManagement Namespace

這種方式也使用ADSI,但它被封裝,並且您需要Framework .NET 3.5。您也可以在same post中找到,但在編輯(2011-10-18 13:25)部分,使用這種方式的C#代碼。

您還可以使用WMI:

$user2Find = "user1" 
$query = "SELECT * FROM ds_user where ds_sAMAccountName='$user2find'" 
$user = Get-WmiObject -Query $query -Namespace "root\Directory\LDAP" 
$user.DS_mail 

您可以在服務器上或從區域內部的計算機localy使用此解決方案,但它更復雜一點,從外域WMI認證。

+0

不錯,謝謝! – Benny 2013-04-26 06:21:26