2012-06-21 39 views
0

我創建的是一個腳本,它從計算機中提取戴爾服務代碼,用戶名和計算機名,並將該信息編譯爲.csv文件。該腳本將通過Active Directory登錄腳本實現,因此最終用戶不必做任何事情。如何檢查現有文件的條目,以免重寫數據

雖然我遇到的問題是,每次有人登錄,它收集他們的信息,並將其添加到列表中。這意味着我的列表可能只有兩個人一遍又一遍地登錄他們的計算機。

我想要發生的事情是讓腳本搜索.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 

任何幫助表示讚賞!謝謝!

回答

1

(1)你的代碼是搞砸:您存儲辭典objFSO,然後嘗試調用objFSO.OpentextFile()

(2)VBScript中無法讀取附加到文件;所以ForAppending(8)將不起作用;你必須首先閱讀 - 打開文件,收集信息,關閉它,追加打開並附加新的用戶信息(如有必要)

(3)使用字典不必要的複雜:填充字典必須從頭到尾閱讀文件,然後才能詢問字典是否存在特定用戶。 雖然只是逐行閱讀文件,但您可以在找到用戶時立即打破閱讀 - 然後關閉 - 打開& append - close - done。

UPDATE

代碼項目(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 

因爲我是個悲觀的杞人憂天:你計劃如何與多個用戶登錄,以應付在寫訪問該文件在同一時間?

+0

有無論如何,你可以幫我編碼嗎?我很誠實,不太擅長VB腳本,並且在上週五剛剛開始寫它。如果沒有,非常感謝您的幫助。 –

+0

至於你最後的問題,我不確定。我甚至沒有想到這一點。你會推薦什麼? –

+0

另外,我在第二行中給出的代碼出錯。錯誤代碼800A0005 –

相關問題