Active directory 如果不起作用
关于这个问题,我已经搜索了很多,但我没有找到任何具体的案例。我试图运行一个脚本,从AD获取所有主机,然后检查每个主机是否有特定的文件。创建了两个txt文件,一个带,一个不带。我遇到的问题是,所有主机名都被添加到'without'文件中,而'with'文件为空,但我知道两个列表都应该列出主机。我知道循环正在工作,因为列出了所有主机名,但它无法应用if/then检查。我很抱歉我的剧本太粗糙了,我对这个很陌生。我将非常感谢任何提示Active directory 如果不起作用,active-directory,Active Directory,关于这个问题,我已经搜索了很多,但我没有找到任何具体的案例。我试图运行一个脚本,从AD获取所有主机,然后检查每个主机是否有特定的文件。创建了两个txt文件,一个带,一个不带。我遇到的问题是,所有主机名都被添加到'without'文件中,而'with'文件为空,但我知道两个列表都应该列出主机。我知道循环正在工作,因为列出了所有主机名,但它无法应用if/then检查。我很抱歉我的剧本太粗糙了,我对这个很陌生。我将非常感谢任何提示 Const ADS_SCOPE_SUBTREE = 2 Dim cn
Const ADS_SCOPE_SUBTREE = 2
Dim cn
Set cn = CreateObject("ADODB.Connection")
cn.Provider = "ADsDSOObject"
cn.Open "Active Directory Provider"
Dim cmd
Set cmd = CreateObject("ADODB.Command")
Set cmd.ActiveConnection = cn
Dim ou
ou = "DC=mydomain,DC=COM"
cmd.CommandText = "SELECT name " & _
"FROM 'LDAP://" & ou & "' " & _
"WHERE objectClass='computer' " & _
"ORDER BY name"
cmd.Properties("Page Size") = 1000
cmd.Properties("Searchscope") = ADS_SCOPE_SUBTREE
Const ForAppending = 8
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
Dim yesFile
Set yesFile = fso.OpenTextFile("pcswithsw.txt", ForAppending, True)
Dim noFile
Set noFile = fso.OpenTextFile("pcswithoutsw.txt", ForAppending, True)
Dim rs
Set rs = cmd.Execute
strComputer = rs(0)
rs.MoveFirst
Do Until rs.EOF
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colFiles = objWMIService.ExecQuery("Select * From CIM_DataFile Where Name = 'C:\\somefile.exe'")
If colFiles.Count = 0 Then
noFile.WriteLine rs(0)
Else
yesFile.WriteLine rs(0)
End If
rs.MoveNext
Loop
yesFile.Close
noFile.Close
Set yesFile = Nothing
Set noFile = Nothing
Set fso = Nothing
我终于明白了。我将主机列表加载到一个数组中,然后将该数组提供给If/then语句。它运行缓慢,但大部分处理时间是脚本等待不存在的主机回复(需要清理AD)
Const ADS_SCOPE_SUBTREE = 2
Const ForAppending = 8
Dim hostArray()
Dim cn
Set cn = CreateObject("ADODB.Connection")
cn.Provider = "ADsDSOObject"
cn.Open "Active Directory Provider"
Dim cmd
Set cmd = CreateObject("ADODB.Command")
Set cmd.ActiveConnection = cn
Dim ou
ou = "DC=mydomain,DC=COM"
cmd.CommandText = "SELECT name " & _
"FROM 'LDAP://" & ou & "' " & _
"WHERE objectClass='computer' " & _
"ORDER BY name"
cmd.Properties("Page Size") = 1000
cmd.Properties("Searchscope") = ADS_SCOPE_SUBTREE
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
Dim outFile
Set outFile = fso.OpenTextFile("computers.txt", ForAppending, True)
Dim yesFile
Set yesFile = fso.OpenTextFile("pcswithsw.txt", ForAppending, True)
Dim noFile
Set noFile = fso.OpenTextFile("pcswithoutsw.txt", ForAppending, True)
Dim j
j=0
Dim rs
Set rs = cmd.Execute
rs.MoveFirst
Do Until rs.EOF
REDIM PRESERVE hostArray(j)
for i = 0 to rs.EOF
hostArray(j)=rs(0)
outFile.WriteLine rs(0)
rs.MoveNext
i = i + 1
j = j + 1
next
Loop
For Each strComputer in hostArray
On Error Resume Next
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colFiles = objWMIService.ExecQuery("Select * From CIM_DataFile Where Name = 'C:\\folder\\subfolder\\file.ext'")
If colFiles.Count = 0 Then
noFile.WriteLine strComputer
Else
yesFile.WriteLine strComputer
End If
Next
yesFile.Close
noFile.Close
Set yesFile = Nothing
Set noFile = Nothing
Set fso = Nothing
msgbox("All done")