0

私が作成したのは、コンピュータから Dell サービス コード、ユーザー名、およびコンピュータ名を取得し、その情報を .csv ファイルにコンパイルするスクリプトです。このスクリプトは Active Directory ログイン スクリプトを介して実装されるため、エンド ユーザーは何もする必要はありません。

私が抱えている問題は、人がログオンするたびに情報を収集し、リストに追加することです。つまり、自分のコンピュータに何度もログオンする 2 人だけでリストがいっぱいになる可能性があります。

私が望んでいるのは、スクリプトが収集された特定のデータを .csv ファイルで検索し、このデータが存在する場合は入力しないようにすることです。

私がこれまでに持っているコードは次のとおりです。

'Get Dell Service Tag Info
set ProSet = GetObject("winmgmts:").InstancesOf("Win32_BIOS")
Set ProSet1 = GetObject("winmgmts:").InstancesOf("Win32_SystemEnclosure")
For each Pro in ProSet
  For each Pro1 in ProSet1
    ServiceTag=Pro.SerialNumber
    exit for
  Next
  exit for
Next

'get username and computername, could also be asked in a batch
Set oShell     = WScript.CreateObject("WScript.Shell")
Set oShellEnv  = oShell.Environment("Process")
sComputerName  = oShellEnv("ComputerName")
sUsername      = oShellEnv("username")

dim filesys, filetxt, getname, path
Set filesys = CreateObject("Scripting.FileSystemObject")
Set filetxt = filesys.OpenTextFile("\\xx.xx.xx.xx\Gathering\DataLog.csv", 8, True, -2)
path = filesys.GetAbsolutePathName("\\xx.xx.xx.xx\Gathering\DataLog.csv")
getname = filesys.GetFileName(path)
filetxt.WriteLine sUsername & ", " & sComputerName & ", " & ServiceTag
filetxt.Close

これは、エントリ チェッカーのない基本的なスクリプトです。

エントリチェッカーに関しては、これは私が試したものですが、うまくいかないようです:

Set objFSO = CreateObject("Scripting.Dictionary")
Set objFile = objFSO.OpenTextFile ("\\xx.xx.xx.xx\Gathering\Dictionary.txt", 8, True)
' Make comparisons case insensitive.
objList.CompareMode = vbTextCompare

' ... code to read user name and assign to variable strNameOfUser.

If (objList.Exists(strNameOfUser) = False) Then
    ' Add this user to the dictionary object.
    objList(strNameOfUser) = True
    ' Log this unique user name.
    objFile.WriteLine strNameOfuser
End If

どんな助けでも大歓迎です!ありがとう!

4

1 に答える 1

1

(1) コードがめちゃくちゃです: 辞書を objFSO に保存してから、objFSO.OpentextFile() を呼び出そうとします。

(2) VBScript は、ファイルの読み取り追加ができません。したがって、 ForAppending (8) は機能しません。最初にファイルを読み取り、開き、情報を収集し、閉じ、追加して開き、新しいユーザー情報を追加する必要があります (必要な場合)。

(3) 辞書の使用は不必要に複雑です。辞書を埋めるには、特定のユーザーが存在するかどうかを辞書に問い合わせる前に、ファイルを最初から最後まで読み取る必要があります。単純にファイルを 1 行ずつ読み取りながら、ユーザーを見つけたらすぐに読み取りを中断できます。次に、閉じる - 開く & 追加する - 閉じる - 完了します。

アップデート

コード内の項目 (3):

  Dim goFS    : Set goFS    = CreateObject( "Scripting.FileSystemObject" )
  Dim tsUsers : Set tsUsers = goFS.OpenTextFile(sFSpec, ForReading, True)
  Dim bFound  : bFound      = False
  Do Until tsUsers.AtEndOfStream
     If 1 = Instr(tsUsers.ReadLine(), sUser) Then
        bFound = True
        Exit Do
     End If
  Loop
  tsUsers.Close
  If Not bFound Then
     Set tsUsers = goFS.OpenTextFile(sFSpec, ForAppending, False)
     tsUsers.WriteLine sUser
     tsUsers.Close
  End If

私は悲観的な心配症なので、複数のユーザーが同時にログインしてファイルに書き込みアクセスする場合、どのように対処する予定ですか?

于 2012-06-21T15:01:36.353 に答える