2013-04-25 20 views
5

Stworzyłem skrypt logowania w oparciu o Active-Directory, moduł, który pyta o członkostwo grupy użytkowników w celu map swoje dyski itpPowerShell - Kompilacja z modułów

mam skompilowane go z PowerGUI i stworzył plik EXE. Problem polega na tym, że moduł nie istnieje na komputerach użytkowników.

Czy można to zrobić bez modułu lub dodać moduł do kompilacji?

+0

Dlaczego nie nazwać ich z DC lub \\ domena \ Sysvol? –

Odpowiedz

2

Do członkostwa w grupach, można również uzyskać bez konieczności podłączania go do AD i analizować dane wyjściowe narzędzia WhoAmI

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

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

Jednym ze sposobów jest używanie interfejsu ADSI (Active-Directory Service Interface).

można znaleźć w innym poście SO (Can I match a user to a group accross different domains?) w jeden sposób, aby znaleźć wszystkie grupy, do których należy użytkownik, używając ADSI, w poście jest to kod C#, ale jest łatwy do przetłumaczenia.

Oto mały przykład rozpoczęcia prostego wyszukiwania.

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"] 
} 

Innym sposobem jest użycie System.DirectoryServices.AccountManagement Namespace.

W ten sposób jest również używany interfejs ADSI, ale jest on hermetyzowany i potrzebny jest program Framework .NET 3.5. Znajdziesz go także w same post, ale w edytowanej części(2011-10-18 13:25), kod C# używa się w ten sposób.

Można również użyć WMI:

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

Można użyć tego rozwiązania lokalnie na serwerze lub z komputera wewnątrz domeny, ale jest to trochę bardziej skomplikowane, aby uwierzytelnić WMI spoza domeny .

+0

Niezła, dzięki! – Benny