Powershell - 使用模块进行编译

时间:2013-04-25 19:00:04

标签: powershell module compilation active-directory

我创建了一个基于Active-Directory模块的登录脚本,该脚本查询用户组成员资格以映射其驱动器等。

我用PowerGui编译了它,并创建了一个EXE文件。 问题是,用户计算机上不存在该模块。

有没有办法在没有模块的情况下执行此操作,或者将模块添加到编译中?

2 个答案:

答案 0 :(得分:2)

对于组成员身份,您也可以在不连接到AD的情况下获取它,并解析WHOAMI实用程序的输出

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

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

答案 1 :(得分: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","jpb@dom.fr","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但在Edited (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

您可以在服务器上或域内的计算机上使用此解决方案,但从域外对WMI进行身份验证会更复杂。