在不同的操作系统中运行powershell脚本

时间:2017-06-12 18:41:27

标签: powershell powershell-v2.0 admin active-directory-group

我正在尝试在Server 2012中运行下面提到的命令&它从管理员用户组中提取用户。但是在Server 2008R2中,它从整个域中拉出来了

Get-WmiObject -Class Win32_GroupUser `
| where{$_.GroupComponent -like "*Administrators*"} `
|foreach { 
$data = $_.PartComponent -split "\," 
$data[1].Remove(0,5).Replace('"','') 
} 

1 个答案:

答案 0 :(得分:0)

正如您所猜测的那样,问题是win2008R2只有PS 2.0.x.我认为该命令where{$_.GroupComponent -like "*Administrators*"}在该版本中不可用,因此它将整个AD查询为后备(这是猜测)。

根据您的描述,我不明白您是否要查询本地服务器或域,因此我将同时输入(所有功能都在win2008R2(PS版本2.0.50727)上):

查询本地管理员和

#get servers by AD OU
If (!(Get-Module ActiveDirectory)) {
    Import-Module ActiveDirectory
}
function get-localadmins{
  [cmdletbinding()]
  Param(
  [string]$server
  )
  $group = get-wmiobject win32_group -ComputerName $server -Filter "LocalAccount=True AND SID='S-1-5-32-544'"
  $query = "GroupComponent = `"Win32_Group.Domain='$($group.domain)'`,Name='$($group.name)'`""
  $list = Get-WmiObject win32_groupuser -ComputerName $server -Filter $query
  $list | %{$_.PartComponent} | % {$_.substring($_.lastindexof("Domain=") + 7).replace("`",Name=`"","\")}
}

get-localadmins 'your_server_name'

如果您的目标是查询整个AD,那么您可以使用:

在Windows 2008 R2 SP1上,它可能会产生错误: System.DirectoryServices.AccountManagement.PrincipalOperationException:枚举组时发生错误(1301)。该组的SID无法解决。

您必须在以下位置安装Microsoft修补程序:https://support.microsoft.com/en-us/help/2830145/sid-s-1-18-1-and-sid-s-1-18-2-cannot-be-mapped-on-windows-based-computers-in-a-domain-environment?wa=wsignin1.0%3Fwa%3Dwsignin1.0

以下代码来自此处:https://stackoverflow.com/a/8057025/6059896(所有作者都信用) - 只将变量名称更改为我的编码风格。

$Recurse = $true

Add-Type -AssemblyName System.DirectoryServices.AccountManagement
$context_type = [System.DirectoryServices.AccountManagement.ContextType]::Domain
$group_principal_identity=[System.DirectoryServices.AccountManagement.GroupPrincipal]::FindByIdentity($ct,'Administrators')
$group.GetMembers($Recurse)