Parsing VBS脚本,用于解析csv、获取数据和移动AD对象

Parsing VBS脚本,用于解析csv、获取数据和移动AD对象,parsing,csv,vbscript,Parsing,Csv,Vbscript,我是vbs的新手,我希望您能帮助我编写这个脚本 基本上,我需要一个脚本,将获得我当前的计算机名,查看csv文件以获得新的相关计算机名,然后使用该新名称将广告中的相应帐户移动到新的OU 我已经知道如何获取我当前的computername以及如何将对象移动到新的OU,这些都是我已经做过的事情,但是我真的没有信心解析csv,根据我当前的computername查找新的computername 新名称是csv文件中当前名称之后的值。只有昏迷才分开 编辑1 我尝试了你的解决方案,但正如评论中所说的,我认为

我是vbs的新手,我希望您能帮助我编写这个脚本

基本上,我需要一个脚本,将获得我当前的计算机名,查看csv文件以获得新的相关计算机名,然后使用该新名称将广告中的相应帐户移动到新的OU

我已经知道如何获取我当前的computername以及如何将对象移动到新的OU,这些都是我已经做过的事情,但是我真的没有信心解析csv,根据我当前的computername查找新的computername

新名称是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"

非常感谢你的帮助!:

您可以使用ADO读取CSV和其他分隔文件。血淋淋的细节将在中讨论。使用VBScript读取简单CSV文件的示例代码如下:

注意:CSV文件需要标题行,以便ADO使用列名:

计算机名 计算机1,其他计算机1 计算机2,其他计算机2 计算机3,其他计算机3 VBScript代码:

选项显式 dim连接:设置连接=CreateObjectADODB.CONNECTION dim记录集:set RECORDSET=CreateObjectADODB.RECORDSET CONNECTION.openprovider=Microsoft.Jet.OLEDB.4.0;数据源=C:\Folder\Containing\CSV\File\;扩展属性=文本;HDR=是;FMT=分隔的 记录集。打开从data.csv中选择*,其中ComputerName='&OldComputerName&',CONNECTION,3,3 '////用于测试\\\\ WScript.Echo记录集.Source “\\\\”用于测试//// 如果是RECORDSET.EOF,则 未找到WScript.Echo记录 WScript.Quit 其他的 dim NewComputerName:NewComputerName=记录集NewComputerName& WScript.Echo newcomberName 如果结束 请注意,这段代码可能无法在64位操作系统上运行-不能直接运行。您必须运行32位版本的CScript/WScript,如下所示:

%windir%\SysWoW64\cscript c:\Path\To\test.vbs
好的,由于您的修改,脚本现在可以完美地工作了!:

但是我还有一个问题,当这个文件有-在名称中时,我似乎无法在FROM子句中打开csv文件

比如:CONTOSO-US-ComputerList.csv我在FROM子句中得到了错误语法错误

但是当我使用没有破折号的文件名时,就没有问题了

我知道这是一个细节,但我别无选择,只能拥有一个名称中带有破折号的文件:/

再次感谢您的帮助:非常感谢

编辑:

不管怎样,我找到了解决方案,多亏了

请求现在如下所示:

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

这个CSV文件有多大?几十张或更多的唱片?嗨,谢谢你的回复。该文件将相当大是的,大约有800个条目,它将在32位版本的XP上运行,所以这应该不是一个问题。当我给它参数Computer 1时,这个脚本是否返回其他Computer 1?我已经编辑了我的答案。关于您的代码i,字符串连接和运算符ii似乎存在问题,您为NewComputerNameYup赋值的方式,[]应该用于在SQL查询中括起特殊字符。您可能希望将此注释作为问题的编辑而不是答案发布。