我需要一些帮助来合并这两个脚本,第一个是我自己编写的,另一个是借用的。如何合并这两个脚本,以便我可以在输出文件中获取所有服务器以及服务器上本地管理员组中的所有成员的列表?
我的脚本:
$SearchOU='OU=Servers,DC=LB,DC=NET'
Get-ADComputer -Filter * -SearchBase $SearchOU | Format-Table -Property name
借用的脚本:
$searchOU='ou=name,dc=dc,dc=com'
Get-ADComputer -filter * -SearchBase $searchOU |
Foreach-Object{
([ADSI]"WinNT://$($_.Name)/Administrators").psbase.invoke('Members') |
ForEach-Object{
$_.GetType().InvokeMember('Name', 'GetProperty', $null, $_, $null)
}
}
答案1
要创建 {Server, User} 的输出列表,您需要将成员资格列表的扩展与 AD 查询中的每一行结合起来。这可以通过Foreach-Object
创建自定义对象来完成:
$searchOU='ou=name,dc=dc,dc=com'
Get-ADComputer -filter * -SearchBase $searchOU |
Foreach-Object {
$server = $_.Name
([ADSI]"WinNT://$($_.Name)/Administrators").psbase.invoke('Members') |
ForEach-Object {
$user = $_.GetType().InvokeMember('Name', 'GetProperty', $null, $_, $null)
New-Object 'PSObject' -property @{'Server'=$server; 'Admin'=$user}
}
}
上述结果可以轻松格式化:
… | Format-Table -AutoSize Server, Name
然后附加| Out-File $filename -encoding UTF8
到文件以保存(或使用重定向运算符;但我更喜欢Out-File
避免使用 UTF8)。
然而:
- 如果核心脚本设计用于重复使用(例如,输出为不同的格式),我建议避免在脚本中进行硬编码格式(这会使进一步的处理/过滤更加困难:需要解析输出)。
- 如果输出文件旨在保存然后进一步处理,那么这
Export-CSV
是一种更好的方法。 New-Object
的属性列表可以任意扩展,而不仅限于上述两个属性。
答案2
Hej,这实际上不是你的问题的直接答案,但这种方式对我来说似乎更容易:
我会用SYDI 服务器更准确地说sydi-包装器和sydi-审计-本地组.vbs工具。
第一个工具将允许您从 Excel 文件中的服务器列表或域树中的特定 OU 收集报告。
sydi-wrapper 描述
该脚本包含在 SYDI 服务器的工具目录中。它允许针对多台计算机运行 SYDI。为此,您需要编辑配置脚本,指定收集选项(即 WMI 选项、导出格式、位置选项)。
使用脚本:
Cscript.exe sydi-wrapper.vbs [选项]
例子
cscript.exe sydi-wrapper.vbs-tComputers.csv
cscript.exe sydi-wrapper.vbs -aDC=contoso,DC=com
cscript.exe sydi-wrapper.vbs -a”OU=成员服务器,DC=contoso,DC=com”
sydi-audit-localgroups 描述
该脚本包含在 SYDI Server 的工具目录中。它的工作方式与 SYDI 概览相同。它解析 SYDI-Server XML 文件并创建一个 Excel 文件,其中包含客户端计算机和成员服务器上所有本地组的列表。
使用脚本:
Cscript.exe sydi-audit-localgroups.vbs -xC:\SYDI\Output
例子
cscript.exe sydi-overview.vbs -x"D:\sydi 输出"
您将获得一个 Excel 文件,其中第一张表上列出了所有组。如果您单击组名对面的链接,您将获得每个服务器的所有本地用户\组列表。
*脚本将运行并尝试在登录帐户下进行连接,请确保这是域一。