2012-03-12 3 views
0

저는 VB에서 매우 새롭기 때문에이 스크립트에 대한 도움을 받고 싶습니다.CSV를 구문 분석하고 데이터를 가져오고 AD 객체를 이동하는 VBS 스크립트

기본적으로 내 현재 컴퓨터 이름을 가져올 스크립트가 필요하며 csv 파일을 조사하여 새 관련 컴퓨터 이름을 얻은 다음 해당 새 이름을 사용하여 광고의 해당 계정을 새 OU로 이동합니다.

나는 현재 컴퓨터 이름을 얻는 방법을 이미 알고 있으며 개체를 새 OU로 이동하는 방법을 알고 있습니다.이 작업은 이미 수행 한 작업이지만 csv를 구문 분석하여 내 컴퓨터 이름을 기반으로 새 컴퓨터 이름을 찾는 것에 대해서는 자신이 없습니다. 현재 하나.

새 이름은 csv 파일의 현재 이름 바로 뒤에 오는 값입니다. 혼수 상태에 불과했다. 1

편집 난 당신의 솔루션을 시도했지만 의견에 명시된 바와 같이 나는하지 않는 몇 가지가 있다고 생각합니다. 레코드 세트를 오용하거나 정보를 검색하는 방법을 모를 수 있습니다. 여기 내 전체 스크립트가있어서 내가하는 일을 볼 수 있습니다.

'Get the old/current computername 
Set wshShell = WScript.CreateObject("WScript.Shell") 
OldComputerName = wshShell.ExpandEnvironmentStrings("%COMPUTERNAME%") 

'Parse the xml file to get the related new computername 

Dim CONNECTION : Set CONNECTION = CreateObject("ADODB.CONNECTION") 
Dim RECORDSET : Set RECORDSET = CreateObject("ADODB.RECORDSET") 
CONNECTION.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\test\;Extended Properties=""text;HDR=YES;FMT=Delimited""" 
RECORDSET.Open "SELECT NewComputerName FROM ComputerList.csv WHERE ComputerName = '& OldComputerName'", CONNECTION, 3, 3 


'Move the new computername in the target AD to a new OU 
Dim NewComputerName 
Dim OldLocation 
NewComputerName = RECORDSET 
OldLocation = "LDAP://CN=" & NewComputerName & ",OU=Staging,OU=Workstations,DC=contoso,DC=lab" 
Set objNewOU = GetObject("LDAP://OU=Migration,OU=Workstations,DC=contoso,DC=lab") 
Set objMoveComputer = objNewOU.MoveHere(OldLocation, vbNullString) 

' It does not work as it said Error: Wrong number of arguments or invalid property assignment pour la ligne: 
' OldLocation = "LDAP://CN=" & NewComputerName & ",OU=Staging,OU=Workstations,DC=contoso,DC=lab" 

감사합니다. :)

+0

가 얼마나 큰이 CSV 파일이 될 것입니다? 몇 개 이상의 기록이 있습니까? –

답변

0

ADO를 사용하여 CSV (및 다른 구분 된) 파일을 읽을 수 있습니다. 자세한 내용은 this article에서 논의됩니다.

참고 :

ComputerName,NewComputerName 
Computer #1,Other Computer #1 
Computer #2,Other Computer #2 
Computer #3,Other Computer #3 

의 VBScript 코드 : ADO 열 이름을 사용하는 CSV 파일을 위해 헤더 행을 필요로 다음과 같이 VBScript를이 사용하여 간단한 CSV 파일을 읽기위한 샘플 코드

option explicit 

dim CONNECTION : set CONNECTION = CreateObject("ADODB.CONNECTION") 
dim RECORDSET : set RECORDSET = CreateObject("ADODB.RECORDSET") 

CONNECTION.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Folder\Containing\CSV\File\;Extended Properties=""text;HDR=YES;FMT=Delimited""" 

RECORDSET.Open "SELECT * FROM data.csv WHERE ComputerName = '" & OldComputerName & "'", CONNECTION, 3, 3 

' //// For testing \\\\ 
WScript.Echo RECORDSET.Source 
' \\\\ For testing //// 

if RECORDSET.EOF then 
    WScript.Echo "Record not found" 
    WScript.Quit 
else 
    dim NewComputerName : NewComputerName = RECORDSET("NewComputerName") & "" 
    WScript.Echo NewComputerName 
end if 

이 코드는 64 비트 OS에서 작동하지 않을 수 있음에 유의하십시오. 다음과 같이 CScript/WScript의 32 비트 버전을 실행해야합니다.

%windir%\SysWoW64\cscript c:\Path\To\test.vbs 
+0

안녕하세요. 답장을 보내 주셔서 감사합니다. 약 800 개의 파일로 상당히 큰 파일 예 32 비트 버전의 XP에서 실행되므로 문제가되지 않습니다. Computer # 1 인수를 주면이 스크립트는 "Other Computer # 1"을 반환합니까? – Wawa41

+0

귀하의 도움을 포함하도록 제 질문을 편집했습니다. – Wawa41

+0

제 대답을 편집했습니다. 귀하의 코드 (i) 문자열 연결 ('&') 연산자 주위에 문제가있는 것 같습니다 (ii) 당신이'NewComputerName'에 값을 할당하는 방식 –

0

변경 사항 덕분에 스크립트가 완벽하게 작동합니다. :)

하지만이 파일이있을 때 FROM 절에서 csv 파일을 열 수없는 것 같습니다. 이름에서.

처럼 : CONTOSO-US-ComputerList.csv 나는 절

에서 오류 구문 오류가 발생하지만 대시없이 파일 이름을 사용할 때 문제가 없습니다.

나는 그것이 상세하게 알고하지만 난 이름에 대시 파일을하는 것보다 선택의 여지가 : 다시/

도와 주셔서 감사는 :) 아주 많이 감사합니다!

편집 :

신경 끄시는 내가 scriptingguys에 솔루션 덕분에 발견!

요청은 이제 다음과 같습니다

strFile = "[CONTOSO-ComputerList.csv]" RECORDSET.Open "SELECT * FROM " & strFile & " WHERE ComputerName = '" & OldComputerName & "'", CONNECTION, 3, 3

+0

그래,'[]'는 SQL의 특수 문자를 둘러싸 기 위해 사용되어야한다. 검색어. 이 메모를 답변이 아닌 질문의 수정으로 게시하고 싶을 수 있습니다. –

관련 문제