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

时间:2017-02-22 13:24:48

标签: powershell export-to-csv administrator

我正在使用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
    
  2. 如果以这种方式报告,那么我可以轻松导出到csv并使用它。 如果可以将其转换为以所需格式而不是txt导出CSV,那就太酷了。

    1. 如何在第6行制作代码,例如如果我想扫描整个子网的名称:server1,server2,.... server38 ...我不必为每台机器手动更改该行。我试过server *,server [*],它给了我错误。
    2. 我是PS中的一个完整的新手,但是试图把事情拼凑起来满足我的需求,并希望你能为我提供所需的帮助。

      感谢。

1 个答案:

答案 0 :(得分:1)

要更改输出以使所有帐户都在一行中,请将底部的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
}