Форум программистов, компьютерный форум, киберфорум
PowerShell
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.69/55: Рейтинг темы: голосов - 55, средняя оценка - 4.69
0 / 0 / 0
Регистрация: 26.06.2015
Сообщений: 20

Не копируется файл Copy-Item

10.10.2018, 10:01. Показов 13503. Ответов 22

Студворк — интернет-сервис помощи студентам
День добрый, господа. У меня есть скрипт, который ищет определенный набор слов в файлах на компе и если находит, то пишет лог + должен копировать найденный файл на хранилку (эту часть я адаптировал сам, а по скольку руки в плане powershell у меня не из плеч, то все выглядит плачевно). Скрипт использует индексированный поиск Windows, что является крайне удобным, но при таком подходе у меня по какой-то причине не копируются ВСЕ файлы форматов отличных от txt.

Если планируете тестить у себя, то сначала нужно убедиться, что у вас включено индексирование.

Проблема в самом низу скрипта.

Сам скрипт:

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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
function Search-FileIndex {
<#
.PARAMETER Path
Absoloute or relative path. Has to be in the Search Index for results to be presented.
.PARAMETER Pattern
File name or pattern to search for. Defaults to *.*. Aliased to Filter to ergonomically match Get-ChildItem.
.PARAMETER Text
Free text to search for in the files defined by the pattern.
.PARAMETER Recurse
Add the parameter to perform a recursive search. Default is false.
.PARAMETER AsFSInfo
Add the parameter to return System.IO.FileSystemInfo objects instead of String objects.
.SYNOPSIS
Uses the Windows Search index to search for files.
.DESCRIPTION
Uses the Windows Search index to search for files. SQL Syntax documented at https://msdn.microsoft.com/en-us/library/windows/desktop/bb231256(v=vs.85).aspx Based on https://blogs.msdn.microsoft.com/mediaandmicrocode/2008/07/13/microcode-windows-powershell-windows-desktop-search-problem-solving/ 
.OUTPUTS
By default one string per file found with full path.
If the AsFSInfo switch is set, one System.IO.FileSystemInfo object per file found is returned.
#>
    [CmdletBinding()]
    param (  
        [Parameter(ValueFromPipeline = $true)]
        [string]$Path,
        [Parameter(Mandatory=$false,ParameterSetName="FullText")]
        [Parameter(Mandatory=$false)]
        [alias("Filter")] 
        [string]$Pattern = "*.*",
        [Parameter(Mandatory=$false,ParameterSetName="FullText")]
        [string]$Text = $null,
        [Parameter(Mandatory=$false)]
        [switch]$Recurse = $false,
        [Parameter(Mandatory=$false)]
        [switch]$AsFSInfo = $false
    )
    if($Path -eq ""){
        $Path = $PWD;
    } 
 
    $path = (Resolve-Path -Path $path).Path
 
    $pattern = $pattern -replace "\*", "%"
    $path = $path.Replace('\','/')
 
    if ((Test-Path -Path Variable:fsSearchCon) -eq $false)
    {
        $global:fsSearchCon = New-Object -ComObject ADODB.Connection
        $global:fsSearchRs = New-Object -ComObject ADODB.Recordset
    }
 
    $fsSearchCon.Open("Provider=Search.CollatorDSO;Extended Properties='Application=Windows';")
 
    [string]$queryString = "SELECT System.ItemPathDisplay FROM SYSTEMINDEX WHERE System.FileName LIKE '" + $pattern + "' "
    if ([System.String]::IsNullOrEmpty($Text) -eq $false){
        $queryString += "AND FREETEXT('" + $Text + "') "
    }
 
    if ($Recurse){
        $queryString += "AND SCOPE='file:" + $path + "' ORDER BY System.ItemPathDisplay"
    }
    else {
        $queryString += "AND DIRECTORY='file:" + $path + "' ORDER BY System.ItemPathDisplay"
    }
    $fsSearchRs.Open($queryString, $fsSearchCon)
    # return
    While(-Not $fsSearchRs.EOF){
        if ($AsFSInfo){
            # Return a FileSystemInfo object 
            [System.IO.FileSystemInfo]$(Get-Item -LiteralPath ($fsSearchRs.Fields.Item("System.ItemPathDisplay").Value) -Force)
        }
        else {
            $fsSearchRs.Fields.Item("System.ItemPathDisplay").Value
        }
        $fsSearchRs.MoveNext()
    }
    $fsSearchRs.Close()
    $fsSearchCon.Close()
}
 
##################                        Допиливал сам                        ##################
 
$Date = Get-Date -Format d
$Senslog = "\\Хранилка\Senslogs\" + "$Date " + "$env:COMPUTERNAME " + "$env:UserName" + ".txt"
$Filepath = "\\Хранилка\Senslogs\Files"
 
Search-FileIndex -Path D:\ -Text "интересующий меня текст" -Recurse | Copy-Item -Force -Destination $Filepath  
Search-FileIndex -Path D:\ -Text "интересующий меня текст" -Recurse | Out-File -Append -LiteralPath $Senslog

Соус на гитхаб создателя скрипта: https://gist.github.com/arebee... e0f501c72d

Добавлено через 11 минут
Совсем забыл про текст ошибки!

Copy-Item : Не удается найти путь "C:\testuser2\Документы\DataFolder\Л ист Microsoft Excel.xlsx", так как он не существует.
C:\testuser2\Documents\DataFolder\Search SensData.ps1:93 знак:60
+ ... ext "интересующий меня текст" -Recurse | Copy-Item -Force -Destination $Filepath
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (D:\testuser2\До...soft Excel.xlsx:String) [Copy-Item], ItemNotFoundException
+ FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Comman ds.CopyItemCommand
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.10.2018, 10:01
Ответы с готовыми решениями:

Запустить команду Copy-Item с правами администратора
Добрый день! Подскажите, пожалуйста, как запустить команду Copy-Item с правами администратора. Пытаюсь записать файлы в папку...

Copy-item с удаленного компьютера правами другого пользователя
Добрый день. Столкнулся с такой проблемой. Мне нужно делать бэкап с определенных компов на определенную сетевую папку, доступ куда есть...

Copy-Item -Recurse с исключением определённых типов файлов
День добрый. Понадобилось мне тут скопировать 600 гб файлов с одного файлового сервера на другой. Там преимущественно офисные документы,...

22
0 / 0 / 0
Регистрация: 09.05.2018
Сообщений: 11
12.08.2019, 21:53
Студворк — интернет-сервис помощи студентам
Ну соглашусь, способ не очень приятный) но все же, как насчёт копирования результата)?
0
 Аватар для bidstrup
419 / 179 / 27
Регистрация: 11.03.2018
Сообщений: 771
12.08.2019, 23:41
Цитата Сообщение от KDE777 Посмотреть сообщение
Если в Windows Search index database храниться и сам текст в оригинальном регистре, тогда замечательно.
А на хрена бы он был тогда нужен, если бы этого не умел. В том-то и дело, что искать он должен просто пулей.
0
 Аватар для KDE777
1887 / 1109 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
13.08.2019, 10:51
Цитата Сообщение от Dimon2490 Посмотреть сообщение
как насчёт копирования результата
С чём именно у вас возникла проблема?

Пример с поиском по содержимому, в случае совпадения с шаблоном поиска, выводит $Filename на экран, а вы можете вместо этого добавлять такие имена в массив $list += $Filename и когда все файлы будут перебраны, передать этот массив Copy-Item (заодно можно будет проверить, что нет одинаковых имён).

Добавлено через 3 минуты
Цитата Сообщение от bidstrup Посмотреть сообщение
В том-то и дело, что искать он должен просто пулей.
В этом никто и не сомневался. Вопрос в получение проиндексированного текста в оригинальном виде, т.е. с сохранением регистра.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.08.2019, 10:51

Копирование папки с файлами на удаленную машину Copy-Item
Доброго времени суток. В общем столкнулся с такой бедой. Есть давольно простая команда для копирования каталога с целевой машины на...

Файл базы SQLITE не копируется через IO.File.Copy
Ребят, никто не сталкивался? Хочу сделать кнопочку создания (копирования) резервной коаии базы данных. База пока не сильно надулась, всего...

Не копируется файл.
Всё компилируется, ошибок не выдаёт, но файл в итоге не копируется, вот код: function GetSpecialFolderPath(folder : integer) : string;...

НЕ КОПИРУЕТСЯ ФАЙЛ
Ребят, помогите. Такая проблема. Занялся на медне оцифровкой своих видеокассет. Всё оцыфровывается нормально, сохраняю на HDD. А потом при...

Не копируется файл
procedure TForm1.Pic_FasClick(Sender: TObject); var S:string; begin if Pic_Dial.Execute then begin S:=Pic_Dial.FileName; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
23
Ответ Создать тему
Новые блоги и статьи
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
Почему SEO не начинается с ключевых слов: что проверить до написания текстов
Neotwalker 01.08.2026
Когда владельцу сайта предлагают заняться SEO, первым шагом часто становится сбор запросов и написание текстов. Логика кажется понятной: 1. Находим ключевые слова. 2. Добавляем их на. . .
Знание — сила: Доктрина интенциональности знаний, углубление в формулу
Hrethgir 01.08.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11957&stc=1&d=1785567302 Знаменитый афоризм Фрэнсиса Бэкона «Знание — сила» (Scientia potentia est) в массовой культуре принято понимать. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru