2016-04-26 19 views
0

Active Directoryでコンピュータオブジェクトを検索するVBScriptを作成しています。オブジェクトが存在しないか、存在し、正しいOUにある場合は、コンピュータをADに作成/結合する別のスクリプトを実行する必要があります。ステートメント条件が満たされずにコードが実行されています

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 

私はに実行している問題は、2つのIf..Then文が、私は条件が全く満たされていない知っているにもかかわらず、毎回実行することです。

私はOrAndを使用する必要がありますか?

+0

ようこそStackOverflow;あなたの最初の質問を投稿していただきありがとうございます。あなたが話している特定の声明を特定してください。新規ユーザーには、[よくある質問をする方法](http://stackoverflow.com/help/how-to-ask)、[完璧な質問](http://codeblog.jonskeet .uk/2010/08/29/writing-the-perfect-question /)と[最小限で完全で検証可能な例](http://stackoverflow.com/help/mcve)を参照してください。それに応じて質問を編集することを検討してください。 – MikeC

答えて

0

質問はMinimal, Complete, and Verifiable exampleの基準を満たしていません。
ただし、一見してOn Error StatementReadLine MethodWorking with Filesを参照してください。

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 

使用

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 

そして、何Do While Not f.AtEndOfStreamについてはg.ReadLineによってフォローアップのようなもの? fまたはg(両方とも同じTextStream object)を使用してください...

+0

まず、コード基準を満たしていないと同意しなければなりません。あまりにも多くのコードがあるかもしれないので、 "最小限の"面を満たしていないかもしれませんが、変数がどこから来たのかを示すために必要でした。それが私がコードの壁を提供した理由です。将来的には、あなたが答えるのが難しくなったに違いないので、私はそうするのをやめようとします。そう言われて、あなたの答えはたくさんの意味があります。私は明らかにf.ReadLineの意味を理解していませんでしたが、あなたはそれを明確にしました。ありがとうございました。変数にf.ReadLineを代入してチェックインして解決策を試します。もう一度おねがいします。 – StayFroztee

+0

これは、うまくいきました。 – StayFroztee

関連する問題