首页 > 解决方案 > 从 Active Directory 扫描计算机以查找本地管理员帐户

问题描述

我需要扫描 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  }

标签: active-directoryadminscanning

解决方案


你看错线了。这$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 脚本。它将突出显示类似的简单语法错误。


推荐阅读