用于在网络上列出本地管理员的 Powershell

Powershell for listing local admins on network

我正在使用 http://iislogs.com/steveschofield/2009/01/09/list-local-administrators-on-a-machine-using-powershell-adsi/ 中的以下 Powershell 提取在 PC 和内部网络服务器中配置的本地和域管理员帐户。

Powershell 脚本如下:

function LogToFile ([string]$strFileName, [string]$strComputer)
{
 Add-Content $strFileName $strComputer
}

$strComputer = “server1.loc.mydomain.com”
$computer = [ADSI](“WinNT://” + $strComputer + “,computer”)
$Group = $computer.psbase.children.find(“Administrators”)
$members= $Group.psbase.invoke(“Members”) | %{$_.GetType().InvokeMember(“Name”, ‘GetProperty’, $null, $_, $null)}

ForEach($user in $members)

{
Write-Host $user
$a = $strComputer + “!” + $user.ToString()
LogToFile “C:\local-admins.txt” $a
}

执行时,它会在 txt 文件中生成以下格式的结果:

server1.loc.mydomain.com!Administrator
server1.loc.mydomain.com!JohnDoe
server1.loc.mydomain.com!Support
server1.loc.mydomain.com!Domain Administrators
  1. 谁能帮我更改 txt 文件的输出,所以结果以这种格式显示:

    server1.loc.mydomain.com!Administrator!JohnDoe!Support!Domain Administrators
    

如果以这种方式报告,那么我可以轻松导出到 csv 并使用它。 如果可以将其转换为以所需格式而不是 txt 导出到 CSV 上,那就太棒了。

  1. 如何在第 6 行制作代码,例如如果我想扫描具有名称的整个子网:server1、server2、.... server38...我不必为每台机器手动更改该行。我尝试了服务器*、服务器[*],但它给了我错误。

我在 PS 方面完全是个新手,但我正在努力拼凑各种东西来解决我的需求,希望您能为我提供所需的帮助。

谢谢。

要将输出更改为在一行中显示所有帐户,请将底部的 foreach() 循环更改为:

$a = @($strComputer;$members) -join '!'
LogToFile "C:\local-admins.txt" $a

要生成名称中包含连续数字的服务器列表,请使用范围运算符 ..:

$serverNames = foreach($number in 1..38){
    'server{0}' -f $number
}

所以你最终会得到这样的结果:

function LogToFile ([string]$strFileName, [string]$strComputer)
{
    Add-Content $strFileName $strComputer
}

foreach($ServerNumber in 1..38){
    $ServerName = 'server{0}.loc.mydomain.com' -f $ServerNumber
    $Computer = [ADSI]("WinNT://$ServerName,computer")
    $Group = $Computer.psbase.children.Find('Administrators')
    $Members= $Group.psbase.invoke('Members') |ForEach-Object { $_.GetType().InvokeMember('Name', 'GetProperty', $null, $_, $null) }

    $Output = @($ServerName;$members) -join '!'
    LogToFile 'C:\local-admins.txt' $Output
}