2016-04-26 4 views
0

Ich schreibe ein VBScript, das das Active Directory nach einem Computerobjekt durchsucht. Wenn das Objekt nicht existiert oder existiert und sich in der richtigen Organisationseinheit befindet, sollte es ein separates Skript ausführen, das den Computer mit dem AD verbindet.Wenn die Anweisungsbedingungen nicht erfüllt sind, wird der Code weiterhin ausgeführt

ObjExist_CorrectOU_7 = Null 
ObjExist_CorrectOU_10 = Null 

If compare = True Then 
    Win7_OU = "OU=DisallowRDP,OU=64Bit,OU=Win8" 
    Win10_OU = "OU=DisallowRDP,OU=64Bit,OU=Win10" 

    For x = 16 To 46 
    If Asc(Mid(objRS.Fields("distinguishedName"), x, 1)) = Asc(Mid(Win7_OU, (x - 15), 1)) Then 
     ObjExist_CorrectOU_7 = True 
    Else 
     ObjExist_CorrectOU_7 = False 
    End If 
    Next 

    For y = 16 To 46 
    If Asc(Mid(objRS.Fields("distinguishedName"), y, 1)) = Asc(Mid(Win10_OU, (y - 15), 1)) Then 
     ObjExist_CorrectOU_10 = True 
    Else 
     ObjExist_CorrectOU_10 = False 
    End If 
    Next 
End If 

If ObjExist_CorrectOU_7 = True Then 
    WScript.Echo "TRUE" 
End If 

Dim objShell 

Set objShell = WScript.CreateObject("WScript.Shell") 

filename = "C:\programdata\dell\kace\k2000_deployment_info.conf" 
Win7_Deployment = "deployment_name=Windows 7 x64 with SP1, join AD" 
Win10_Deployment = "deployment_name=Development Windows 10 (x64), join AD" 

Set fso = CreateObject("Scripting.FileSystemObject") 
Set f = fso.OpenTextFile(filename) 

Do While Not f.AtEndOfStream 
    If ((f.ReadLine = Win7_Deployment) Or ((f.ReadLine = Win7_Deployment) And (ObjExist_CorrectOU_7 = True))) Then 
    WScript.Echo "IT WORKED!" 
    'objShell.Run "JoinAD_Win7.vbs" 
    Exit Do 
    End If 
    On Error Resume Next 
Loop 

f.Close 
Set g = fso.OpenTextFile(filename) 

Do While Not f.AtEndOfStream 
    If ((g.ReadLine = Win10_Deployment) Or ((g.ReadLine = Win10_Deployment) And (ObjExist_CorrectOU_10 = True))) Then 
    'objShell.Run "JoinAD_Win10.vbs" 
    WScript.Echo "IT WORKED AGAIN!" 
    Exit Do 
    End If 
    On Error Resume Next 
Loop 

g.Close 

Set objShell = Nothing 

Das Problem, das ich in laufen lasse, ist, dass die beiden If..Then Aussagen jedes Mal ausführen, auch wenn ich weiß, dass die Bedingungen sind absolut nicht erfüllt werden.

Hat es mit meiner Verwendung von Or und And zu tun?

+0

Willkommen bei StackOverflow; Danke, dass du deine erste Frage geschrieben hast. Bitte geben Sie die spezifischen Aussagen an, über die Sie sprechen. Es ist hilfreich für neue Benutzer, Folgendes zu lesen: [Wie man eine gute Frage stellt] (http://stackoverflow.com/help/how-to-ask), [Die perfekte Frage] (http: //codeblog.jonskeet .uk/2010/08/29/Schreiben der perfekten Frage /) und [Minimales, vollständiges und überprüfbares Beispiel] (http://stackoverflow.com/help/mcve). Bitte überlegen Sie, Ihre Frage entsprechend zu bearbeiten. – MikeC

Antwort

0

Ihre Frage erfüllt nicht Minimal, Complete, and Verifiable example Kriterien.
Jedoch auf den ersten Blick: lesen Sie On Error Statement und und Working with Files Dokumentation.

Do While Not f.AtEndOfStream 
    ''' ↓ this `ReadLine` reads every uneven line i.e. the 1st, 3rd, 5th, … 
    If ((f.ReadLine = Win7_Deployment) Or ((f.ReadLine = Win7_Deployment) And (ObjExist_CorrectOU_7 = True))) Then 
    '''  this one reads every even line ↑  i.e. the 2nd, 4th, 6th, … 
    WScript.Echo "IT WORKED!" 
    'objShell.Run "JoinAD_Win7.vbs" 
    Exit Do 
    End If 
    On Error Resume Next ' this causes that script continues on line next to IF … THEN 
         ' in case of uneven records in file. 
         ' i.e. runtimme error "Input past end of file" 
Loop 

Verwendung so etwas wie

Do While Not f.AtEndOfStream 
    sReadLine = f.ReadLine 
    If ((sReadLine = Win7_Deployment) Or ((sReadLine = Win7_Deployment) And (ObjExist_CorrectOU_7 = True))) Then 
    WScript.Echo "IT WORKED!" 
    'objShell.Run "JoinAD_Win7.vbs" 
    Exit Do 
    End If 
    ''' get rid of `On Error Resume Next` statement at all 
Loop 

Und was Do While Not f.AtEndOfStream gefolgt von g.ReadLine up? Verwenden Sie entweder f oder g (das gleiche TextStream object in beiden) ...

+0

Zunächst einmal würde ich nicht damit einverstanden sein, die Code-Kriterien nicht zu erfüllen. Es könnte ein bisschen zu viel Code sein, also nicht den "minimalen" Aspekt erfüllen, aber ich brauchte es, um zu zeigen, woher die Variablen kamen. Deshalb habe ich die Codewand bereitgestellt. In Zukunft werde ich versuchen, dies zu unterlassen, da es schwieriger für Sie gewesen ist, zu antworten. Davon abgesehen ist Ihre Antwort sehr sinnvoll. Ich habe die Bedeutung von f.ReadLine offensichtlich nicht verstanden, aber Sie haben das klargestellt. Vielen Dank. Ich werde Ihre Lösung versuchen, indem Sie die f.ReadLine einer Variablen zuweisen und wieder einchecken. Nochmals vielen Dank. – StayFroztee

+0

Das hat funktioniert, danke. – StayFroztee

Verwandte Themen