Я пишу скрипт на VB Script для форматирования данных Active Directory. Я использую Bat Script для создания вывода в txt, и я хочу сделать VB Script для форматирования данных с заголовками.
Мой пакетный скрипт
dsquery * -limit 0 -filter (objectclass=computer) -attr Name distinguishedName operatingSystem operatingSystemVersion whenChanged whenCreated > fullq.txt
Сценарий VB, который у меня есть, в настоящее время
Option Explicit
Dim FSO, TextPath, CSVPath
Dim Textline, oText, oCSV
Dim CN, OU, i
Set FSO = CreateObject("Scripting.FileSystemObject")
TextPath = "fullq.txt"
Set oText = FSO.OpenTextFile(TextPath,1)
CSVPath = "fullq.csv"
Set oCSV = FSO.CreateTextFile(CSVPath, 2 ,False)
oCSV.WriteLine("Name,DistinguishedName,OperatingSystem,OperatingSystemVersion,whenChanged,whenCreated")
oCSV.WriteLine
oText.SkipLine
Do Until oText.AtEndOfStream
Textline = oText.ReadLine()
OU = Split(TextLine, ",")
CN = Mid(OU(0), 5)
oCSV.Write CN & ","
For i = 1 To UBound(OU)
oCSV.Write OU(i)
If i < UBound(OU) Then
oCSV.Write("/")
End If
Next
oCSV.Writeline
Loop
oCSV.WriteLine
oCSV.Close
Проблема, с которой я сталкиваюсь, заключается в том, что данные OperatingSystem, OperatingSystemVersion, whenCreated и whenChanged находятся в столбце выделенного имени. Я хочу, чтобы это было в их собственной соответствующей колонке. Приведенный выше код в основном предназначен для DistinguishedName. Я добавил новый атрибут: OperatingSystem, OperatingSystemVersion, whenChanged, whenCreated. Для выделенного имени я хотел бы заменить запятую на «/», тогда как остальные атрибуты я хотел бы, чтобы они были записаны в соответствующем столбце. Я не могу использовать PowerShell, так как компания заблокировала его.
Вывод в CSV выглядит так:
Name,DistinguishedName,OperatingSystem,OperatingSystemVersion,whenChanged,WhenCreated
PC1,OU=1/OU=2/OU=3/DC=4/DC=COM Window 123 12/12/12 10:10:10 12/12/12 10:10:10 , , ,
Как написано выше, я попробовал этот сценарий VB, но данные OperatingSystem, OperatingSystemVersion, whenCreated и whenChanged находятся в столбце различаемого имени. Я хочу, чтобы это было в их собственной соответствующей колонке.
Вот как будет выглядеть файл fullq.txt:
Name DistinguishedName OperatingSystem OperatingSystemVersion whenChanged WhenCreated
PC1 OU=1/OU=2/OU=3/DC=4/DC=COM Window 123
12/12/12 10:10:10 12/12/12 10:10:10
Компания блокирует запуск PowerShell, поскольку он считается привилегированным пользователем. следовательно, я не могу использовать PowerShell
Пожалуйста, опубликуйте хотя бы одну примерную строку из файла fullq.txt (у меня нет среды AD, настроенной для получения вывода самостоятельно).
Привет, я попытался поместить вывод fullq.txt в меру своих возможностей в сообщении, но в основном это заголовки и значения, заголовки и значения разделены пробелом.
То, что вы разместили для fullq.txt, не имеет смысла. Ваш сценарий разбивается на запятые, но в этом образце входного файла запятых нет. Пожалуйста, перепроверьте. Я также не вижу, как вы получаете три замыкающие запятые в своем выводе.
Сценарий был в основном для выделенного имени, так как в нем была кратная запятая, теперь я хочу добавить больше атрибутов. Я изучаю это в Интернете, но безрезультатно, так как большинство из них написано с использованием PowerShell.
Нет нужды в объяснениях. Пожалуйста, отредактируйте свой вопрос, чтобы я мог воспроизвести ваш вывод. Либо ввод должен содержать запятые, либо сценарий не должен разделяться на запятые.
Вы должны отредактировать образец fullq.txt или отредактировать сценарий. В нынешнем виде я не могу воспроизвести ваш вывод, используя опубликованный сценарий и опубликованный ввод. И не только редактировать. Тестируйте то, что вы публикуете!
На данный момент я предполагаю, что ваш входной пример верен, а код, который разбивается на запятые, можно удалить. Смотрите ответ ниже.
Отвечает ли это на ваш вопрос? Конвертировать txt файл в excel в vbscript





Учитывая предоставленный образец fullq.txt, ввод можно разделить на " " (два пробела), а затем игнорировать пустые записи и обрезать результаты:
Const Excel = True
Set oFSO = CreateObject("Scripting.FileSystemObject")
TextPath = "fullq.txt"
Set oText = oFSO.OpenTextFile(TextPath,1)
CSVPath = "fullq.csv"
Set oCSV = oFSO.CreateTextFile(CSVPath,2,True)
If Excel Then oCSV.WriteLine "SEP=,"
oCSV.WriteLine "Name,DistinguishedName,OperatingSystem,OperatingSystemVersion,whenChanged,whenCreated"
oText.SkipLine
Do Until oText.AtEndOfStream
NewLine = ""
Textline = oText.ReadLine
aTextLine = Split(Textline," ")
For i = 0 To UBound(aTextLine)
If aTextLine(i)<>"" Then
If NewLine<>"" Then NewLine = NewLine & ","
NewLine = NewLine & Trim(aTextLine(i))
End If
Next
oCSV.Writeline NewLine
Loop
oText.Close
oCSV.Close
Обратите внимание, что в примере входных данных не было запятых, поэтому я удалил код, который разбивается на запятые.
Привет, извините, недавно был чем-то занят, я попробовал ваш код, но он не работает, так как он продолжает работать, поэтому мне нужно завершить задачу, чтобы она перестала работать. Недавно я попытался разбить коды на множество частей и обнаружил проблему. Сначала я попытаюсь решить это, если я не могу, я изменю вопрос. Спасибо за искреннюю помощь! извините что вдруг удалил
Судя по входному образцу, похоже, что единственная проблема со сценарием, который я изначально опубликовал, заключается в том, что я забыл сбросить новую строку на каждой итерации. Теперь эта строка добавлена. Пожалуйста, повторите тестирование. Если вывод по-прежнему неверен, опубликуйте больший образец ввода.
Получил, через два дня проверю, спасибо большое
Привет, я проверил ваш ответ, и мне нравится, как он есть, но я хотел бы спросить, можно ли записывать данные в свой собственный столбец? если да, то как? потому что на данный момент выходные данные, все данные находятся в столбце A, например, «имя, различающееся имя, операционная система, версия операционной системы, когда изменено, когда создано». Возможно ли, чтобы каждые данные находились в своем столбце?
Вы говорите об импорте этого CSV-файла в электронную таблицу, например Excel? Если это так, это просто вопрос того, как вы загружаете файл. Если у вас установлен Excel и дважды щелкните CSV, он загрузится в один столбец, но если вы используете «Открыть файл», вы получите параметры, позволяющие разделить его на запятые, а затем он будет загружаться в отдельные столбцы.
Если вы используете Excel, то он будет автоматически разделен запятыми, если первая строка CSV-файла будет SEP=,. Я изменил сценарий, чтобы сделать это возможным.
Это странно. PowerShell предназначен для такого типа работы. Почему PowerShell заблокирован, а VBScript разрешен? Это противоположно тому, что можно было бы ожидать. Это действительно заблокировано или вам просто нужно установить политику выполнения?