从Active Directory扫描计算机以查找本地管理员帐户

时间:2018-05-11 19:39:31

标签: active-directory admin scanning

我需要扫描Active Directory并将信息传递到本地管理检查脚本中。但由于某种原因,这个脚本一直在失败。

失败了
$Group = $computer.psbase.children.find(”Administrators”)

这是脚本

 ################################################
 #Start looking for windows 10 & computers 7    #
 ################################################
$root = {Get-ADComputer -Filter * | Where-Object {$_.Name -like "win10*"} | Select -Property Name
Get-ADComputer -Filter * | Where-Object {$_.Name -like "*win7"} | Select -Property Name}
foreach ($server in $root)
 {
$computer = [ADSI](”WinNT://” + "$server" + “,computer”)
$Group = $computer.psbase.children.find(”Administrators”)
$members = ($Group.psbase.invoke(”Members”) | %{$_.GetType().InvokeMember(”Adspath”, ‘GetProperty’, $null, $_, $null)}) -  replace ('WinNT://DOMAIN/' + $server + '/'), '' -replace ('WinNT://DOMAIN/', 'DOMAIN\') -replace ('WinNT://', '')
 $members  }

1 个答案:

答案 0 :(得分:0)

你看错了路线。它是抱怨的$members =行。连字符和第一个“替换”之间有两个空格:

-  replace ('WinNT://DOMAIN/' + $server + '/')

那里不应该有任何空格。试试这个:

$root = {Get-ADComputer -Filter * | Where-Object {$_.Name -like "win10*"} | Select -Property Name
Get-ADComputer -Filter * | Where-Object {$_.Name -like "*win7"} | Select -Property Name}
foreach ($server in $root)
{
    $computer = [ADSI](”WinNT://” + "$server" + “,computer”)
    $Group = $computer.psbase.children.find(”Administrators”)
    $members = ($Group.psbase.invoke(”Members”) | %{$_.GetType().InvokeMember(”Adspath”, ‘GetProperty’, $null, $_, $null)}) -replace ('WinNT://DOMAIN/' + $server + '/'), '' -replace ('WinNT://DOMAIN/', 'DOMAIN\') -replace ('WinNT://', '')
    $members
}

如果您还没有,请尝试使用Windows中包含的Windows PowerShell ISE来编写PowerShell脚本。它将突出显示简单的语法错误。