【发布时间】:2015-05-14 05:24:25
【问题描述】:
我正在尝试生成一个报告,其中包含来自 SQL Server 的许多 AD OU 中的计算机对象计数,以便我可以将其连接到 SQL DB 中的其他数据,然后使用 SSRS 创建一个报告。
我已经知道如何使用单个 OU(在我的情况下代表具有唯一代码的物理站点位置),但我需要能够为目录中的所有 OU 执行此操作。
这是我获取 1 个单一 OU 的结果的查询。有什么想法吗?
DECLARE @SiteCode int
SET @SiteCode = 1234
DECLARE @Region nvarchar(100)
SET @Region = (
SELECT TOP 1 RegionName
FROM tbl_ADSiteInfo
WHERE SiteCode = @SiteCode
)
DECLARE @SiteName nvarchar(250)
SET @SiteName = (
SELECT TOP 1 SiteName
FROM tbl_ADSiteInfo
WHERE SiteCode = @SiteCode
)
DECLARE @SQL nvarchar(1000)
SET @SQL = '
SELECT TOP 901 COUNT(*) As ''Count''
FROM OpenQuery(
ADSI,
''
SELECT distinguishedName,extensionAttribute3,extensionAttribute4,extensionAttribute2, name
FROM ''''LDAP://OU=Computers,OU=' + @SiteName + ',OU=' + @Region + ',OU=Branches,DC=COMPANY,DC=COM''''
WHERE objectClass = ''''Computer''''
''
) AS tblADSI
'
exec dbo.sp_executeSQL @SQL
【问题讨论】:
-
您需要重新考虑这一点。递归地从 AD 中选择每个对象(或仅选择主文件夹下的所有对象),从可分辨名称中提取容器路径,然后按该路径分组以按 OU 进行对象计数。
标签: sql-server active-directory