|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] [Вопрос новичка] Ошибка в скрипте PowerShell |
|
PowerShell - [решено] [Вопрос новичка] Ошибка в скрипте PowerShell
|
Новый участник Сообщения: 12 |
Доброго времени суток, уважаемые форумчане! Прошу прощения, если этой темой нарушил какое-то правило форума, если подобный вопрос уже был или решение покажется вам слишком очевидным, первый раз использую PowerShell и поиск по гуглу/форуму ничего не дал. Буду признателен за любую помощь в исполнении простого скрипта.
Задача: Есть текстовый документ, содержащий в себе данные типа: Мне необходимо, чтобы PowerShell выдал мне информацию, что в текстовом документе: 1 - 3 2 - 2 4 - 1 Get-Content .\smm.txt | ForEach-Object -Begin { $wordCounts.@{} } -Process { $wordCounts.$_++ } -End { $wordCounts.GetEnumerator() | Sort-Object -Property Value } Не удается найти свойство "2" для данного объекта. Убедитесь, что оно существует и его можно задать. строка:1 знак:78 + ... Object -Begin { $wordCounts.@{} } -Process { $wordCounts.$_++ } -End ... + ~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : PropertyNotFound Не удается найти свойство "1" для данного объекта. Убедитесь, что оно существует и его можно задать. строка:1 знак:78 + ... Object -Begin { $wordCounts.@{} } -Process { $wordCounts.$_++ } -End ... + ~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : PropertyNotFound Не удается найти свойство "2" для данного объекта. Убедитесь, что оно существует и его можно задать. строка:1 знак:78 + ... Object -Begin { $wordCounts.@{} } -Process { $wordCounts.$_++ } -End ... + ~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : PropertyNotFound Не удается найти свойство "1" для данного объекта. Убедитесь, что оно существует и его можно задать. строка:1 знак:78 + ... Object -Begin { $wordCounts.@{} } -Process { $wordCounts.$_++ } -End ... + ~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : PropertyNotFound Не удается найти свойство "4" для данного объекта. Убедитесь, что оно существует и его можно задать. строка:1 знак:78 + ... Object -Begin { $wordCounts.@{} } -Process { $wordCounts.$_++ } -End ... + ~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : PropertyNotFound Не удается найти свойство "1" для данного объекта. Убедитесь, что оно существует и его можно задать. строка:1 знак:78 + ... Object -Begin { $wordCounts.@{} } -Process { $wordCounts.$_++ } -End ... + ~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : PropertyNotFound Невозможно вызвать метод для выражения со значением NULL. строка:1 знак:104 + ... ++ } -End { $wordCounts.GetEnumerator() | Sort-Object -Property Value ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull |
|
Отправлено: 12:32, 26-01-2020 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата coollogan:
|
|
Отправлено: 14:43, 28-01-2020 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 12
|
Профиль | Отправить PM | Цитировать Цитата Iska:
|
|
Отправлено: 15:32, 28-01-2020 | #12 |
fascinating rhythm Сообщения: 6626
|
Профиль | Отправить PM | Цитировать coollogan, объём данных, который вы обрабатываете, весьма большой.
Необходимо дождаться окончания работы скрипта - да, он может работать несколько часов. Если вы хотите быстрее, надо запускать на более мощном железе. Либо, сначала модифицировать сам исходный файл, например, убрать https://www.instagram.com/, а оставлять только логины - это уменьшит время обработки, т. к. объём файла будет меньше. |
------- Последний раз редактировалось DJ Mogarych, 28-01-2020 в 16:01. Отправлено: 15:46, 28-01-2020 | #13 |
Новый участник Сообщения: 12
|
Профиль | Отправить PM | Цитировать Цитата DJ Mogarych:
Следующий на обработку файл – 147мб, боюсь представить сколько времени займет процесс. |
|
Отправлено: 15:57, 28-01-2020 | #14 |
fascinating rhythm Сообщения: 6626
|
Профиль | Отправить PM | Цитировать Ну, можно, наверное, намутить какой-то вывод в консоль процесса, но это ещё больше растянет время обработки.
coollogan, я упустил одну важную вещь! Уберите из скрипта В изначальном условии вы давали цифры, а в результате обрабатываете нецифровые строки. Так что gc C:\temp\PS.txt |group -noel |select name,count |sort name |Export-Csv C:\temp\PS.csv ';' -NoType |
------- Последний раз редактировалось DJ Mogarych, 28-01-2020 в 17:57. Отправлено: 16:53, 28-01-2020 | #15 |
Новый участник Сообщения: 12
|
Профиль | Отправить PM | Цитировать DJ Mogarych, большое спасибо за помощь)
|
Отправлено: 18:00, 28-01-2020 | #16 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата DJ Mogarych:
![]() coollogan, Вам действительно нужен подсчёт количества повторов? Может быть, задача проще, и Вам достаточно просто отобрать уникальные значения, без подсчёта повторов, не?! |
|
Отправлено: 19:05, 28-01-2020 | #17 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать coollogan, можете попробовать на WSH (используем OLE DB):
Скрытый текст
Option Explicit Const adOpenStatic = 3 Const adLockOptimistic = 3 Const adCmdText = 1 Dim strSourceFile Dim strDestFile Dim strPath2Schema Dim objRecordset Dim dtStartDateTime strSourceFile = "PS.txt" strDestFile = "ResultFile.csv" With WScript.CreateObject("Scripting.FileSystemObject") strPath2Schema = .GetParentFolderName(WScript.ScriptFullName) dtStartDateTime = Now() WScript.Echo "Start at: " & CStr(dtStartDateTime) If Not .FileExists(.BuildPath(strPath2Schema, "Schema.ini")) Then With .CreateTextFile(.BuildPath(strPath2Schema, "Schema.ini"), True) .Write _ "[" & strSourceFile & "]" & vbCrLf & _ "ColNameHeader=False" & vbCrLf & _ "CharacterSet=1251" & vbCrLf & _ "Format=Delimited(;)" & vbCrLf & _ "TextDelimiter=none" & vbCrLf & _ "Col1=Url Text" & vbCrLf & _ "" & vbCrLf & _ "[" & strDestFile & "]" & vbCrLf & _ "ColNameHeader=True" & vbCrLf & _ "CharacterSet=1251" & vbCrLf & _ "Format=CSVDelimited" & vbCrLf & _ "TextDelimiter=none" & vbCrLf & _ "Col1=Url Char Width 255" & vbCrLf & _ "Col2=Count Integer" & vbCrLf .Close End With End If If .FileExists(.BuildPath(strPath2Schema, strDestFile)) Then .DeleteFile .BuildPath(strPath2Schema, strDestFile), True End If WScript.CreateObject("ADODB.Recordset").Open _ "SELECT S.[url], COUNT(S.[url]) AS [Count] INTO [" & strDestFile & "] " & _ "FROM [" & strSourceFile & "] AS S " & _ "GROUP BY S.[url] " & _ "ORDER BY COUNT(S.[url]) DESC", _ "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strPath2Schema & ";Extended Properties=""text;""", _ adOpenStatic, adLockOptimistic, adCmdText WScript.Echo "Finish at: " & CStr(Now()) WScript.Echo "Total: " & CStr(DateDiff("s", dtStartDateTime, Now())) & " second(s)." End With WScript.Quit 0 Поместите скрипт рядом с Вашим файлом PS.txt. У меня получается на Вашем выложенном файле PS.txt так: Скрытый текст
![]() с сортировкой — чуть больше двадцати секунд (без сортировки — чуть больше пятнадцати секунд). NB! Важное замечание: на x64 ОС нужно использовать x86-версии cscript.exe/wscript.exe, т.е., прямо указывать путь к ним из каталога C:\Windows\SysWOW64 (см. скриншот под спойлером выше). |
Отправлено: 20:16, 28-01-2020 | #18 |
Новый участник Сообщения: 12
|
Профиль | Отправить PM | Цитировать Цитата Iska:
Цитата Iska:
Цитата Iska:
![]() Это встроенная функция как PowerShell, или можно её скачать? Мне советовали использовать AWK, чуть с ума не сошел изучая сайты которые хоть что-то пишут про него) Да пишут так, как будто первые 499 страниц инструкции куда-то делись, и начинается с пятисотой)) Понял, что не мой вариант, хотя там такой массив данных обрабатывался за несколько секунд тоже) |
|||
Отправлено: 22:01, 28-01-2020 | #19 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата coollogan:
2. Расположите данный скрипт рядом с Вашим файлом PS.txt. 3. Вызовите скрипт на исполнение. Если Ваша ОС — x64, то вместо пункта 3 будут следующие пункты: 3. Откройте интерпретатор команд: Win-R, «"%comspec%" /k», Enter. 4. Перетащите из окна Проводника в окно интерпретатора команд файл «C:\Windows\SysWOW64\cscript.exe». 5. Нажмите пробел, находясь в окне интерпретатора команд. 6. Перетащите из окна Проводника в окно интерпретатора команд скрипт WSH (файл с расширением .vbs), созданный в пп.1-2. 7. Нажмите Enter, находясь в окне интерпретатора команд. |
|
Отправлено: 23:12, 28-01-2020 | #20 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Redhat/Fedora - вопрос новичка - имя ПК | chek | Общий по Linux | 1 | 23-10-2017 19:53 | |
Разное - С чего начать настройку Windows 7 x64 ? - какие статьи прочитать (вопрос/ы новичка). | Макс Фолдер | Microsoft Windows 7 | 23 | 06-03-2016 05:33 | |
CMD/BAT - ошибка в скрипте | cyber_ua | Скриптовые языки администрирования Windows | 4 | 01-03-2012 16:46 | |
VBS/WSH/JS - ошибка в скрипте | D_e_n_n | Скриптовые языки администрирования Windows | 3 | 12-08-2011 14:03 | |
Вопрос новичка, о CSS+DIV верстке | Bullet-Avalon | Вебмастеру | 12 | 17-02-2009 00:57 |
|