Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Windows [игнор отключен] [закрыт для гостей] / Powershell как добавить в массив строк новый элемент / 6 сообщений из 6, страница 1 из 1
15.09.2017, 13:32
    #39521819
microdin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Powershell как добавить в массив строк новый элемент
Здравствуйте.
Помогите, пожалуйста, исправить скрит.
Задача считать файла с флешки и найти в каждом строку начинающуюся с "30414".
Каждое значение занести в массив.
Проблема в том, что массив в итоге становится одной строкой из пяти элементов.

Пробовал и
Код: powershell
1.
 $my30414 = $my30414 + $myRaw.SubString($myRaw.IndexOf("=")+1, 20) 


и
Код: powershell
1.
 $my30414 += $myRaw.SubString($myRaw.IndexOf("=")+1, 20) 



Пытаюсь перебрать массив в цикле - получается только 1 итерация.

Заранее благодарю

Код: powershell
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
cls
[String]$my30414 = #@()

$DriveList = Get-WmiObject Win32_logicaldisk -filter "DriveType = '2'"
If ($DriveList -eq $NULL) 
{ 
    write-host "No flash drives"
    break 
}  
Else
{    
#if just 1 flash drive found 
    If ($DriveList[-1] -eq $NULL)
    {
        $myFiles = @(get-childitem -Path $DriveList.DeviceID -Filter *.txt | Where {!$_.PSIsContainer})
        If ($myFiles -ne $NULL)
        {
            $i = 0
            ForEach ($myFile in $myFiles)
            {
                $myPath = Join-Path -Path $DriveList.DeviceId -ChildPath $myFile
                                                
                $myRaw = Select-String -Path $myPath -Pattern "30414"
                $my30414 = $my30414 + $myRaw.SubString($myRaw.IndexOf("=")+1, 20)

                $i += 1                
            }
        }        
    }
#if more than 1 flash drive found   
    Else
    {
        ForEach ($oneDrive in $DriveList)
        {
            $myFiles = @(get-childitem -Path $oneDrive.DeviceID | Where {!$_.PSIsContainer})
            If ($myFiles -ne $NULL)
            {
                ForEach ($myFile in $myFIles)
                {

                }
            }
        }
    }
            
    write-host "end_Of_script"  
    $my30414
}
...
Рейтинг: 0 / 0
15.09.2017, 13:58
    #39521859
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Powershell как добавить в массив строк новый элемент
Код: powershell
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
# Создать пустой массив

$my30414 = "()

# Добавление в массив элементов

ForEach ...
  ...
    $my30414 += $myRaw.SubString($myRaw.IndexOf("=")+1, 20)
  ....
Next
...
Рейтинг: 0 / 0
15.09.2017, 14:00
    #39521863
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Powershell как добавить в массив строк новый элемент
Сорри, пунто подгадил...
Код: powershell
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
# Создать пустой массив

$my30414 = @()

# Добавление в массив элементов

ForEach ...
  ...
    $my30414 += $myRaw.SubString($myRaw.IndexOf("=")+1, 20)
  ....
Next
...
Рейтинг: 0 / 0
15.09.2017, 14:38
    #39521891
microdin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Powershell как добавить в массив строк новый элемент
Спасибо, но как мне кажется, я так и делаю.
В изначальном коде была закомментирована строка создания массива, так как я пробовал создать его другим способом.
Нижеприведенный код выдает результат в виде одной строки

3041481060000000000330414810138000000002304148109000000000013041481013800000000230414810600000000003

и одной итерации в цикле в конце (значение $i при выводе = 1)

Т.е. выход в ISE следующий
end_Of_script
3041481060000000000330414810138000000002304148109000000000013041481013800000000230414810600000000003
Counter value 1
3041481060000000000330414810138000000002304148109000000000013041481013800000000230414810600000000003
End 1

Еще раз спасибо

$my30414 = @()

Код: powershell
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
CLS
$my30414 = @()
$DriveList = Get-WmiObject Win32_logicaldisk -filter "DriveType = '2'"
If ($DriveList -eq $NULL) 
{ 
    write-host "No flash drives"
    break 
}  
Else
{    
#if just 1 flash drive found 
    If ($DriveList[-1] -eq $NULL)
    {
        $myFiles = @(get-childitem -Path $DriveList.DeviceID -Filter *.txt | Where {!$_.PSIsContainer})
        If ($myFiles -ne $NULL)
        {
            $i = 0
            ForEach ($myFile in $myFIles)
            {
                $myPath = Join-Path -Path $DriveList.DeviceId -ChildPath $myFile
                                                
                $myRaw = Select-String -Path $myPath -Pattern "30414"
                $my30414 += $myRaw.SubString($myRaw.IndexOf("=")+1, 20)

                $i += 1                
            }
        }        
    }
#if more than 1 flash drive found   
    Else
    {}
    write-host "end_Of_script"  
    write-host $my30414

    $i=0
    ForEach ($oneAc in $my30414)
    { 
    $i += 1
    write-host "Counter value", $i
    write-host $oneAc 
    }
    write-host "End ", $i
}
...
Рейтинг: 0 / 0
15.09.2017, 14:43
    #39521894
microdin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Powershell как добавить в массив строк новый элемент
Если пробовать в "командной строке" PowerShell, то работает как надо

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
PS C:\Users\...> $my30414 = @()
PS C:\Users\...> $my30414 += "30414_1"
PS C:\Users\...> $my30414 += "30414_2"
PS C:\Users\...> $my30414 += "30414_3"
PS C:\Users\...> $my30414
30414_1
30414_2
30414_3

А в скрипте почему-то все складывается в одну длинную строку.
...
Рейтинг: 0 / 0
15.09.2017, 17:43
    #39522012
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Powershell как добавить в массив строк новый элемент
microdinНижеприведенный код выдает результат в виде одной строкиПроверьте длину. Для страховки - и в шелле.
...
Рейтинг: 0 / 0
Форумы / Windows [игнор отключен] [закрыт для гостей] / Powershell как добавить в массив строк новый элемент / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]