Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] поиск по имени (http://forum.oszone.net/showthread.php?t=313484)

viko2323 04-04-2016 12:37 2622900

поиск по имени
 
Добрый день! Помогите со скриптом. Нужно найти файл по имени, например в Program Files, и при его наличии совершить действие с каталогом в котором находиться этот файл.

Kazun 04-04-2016 12:49 2622902

Код:

Get-ChildItem C:\Windows\* -Filter cmd.exe -File  -Recurse | Foreach {
        $_.DirectoryName
}


viko2323 04-04-2016 14:24 2622937

Спасибо
я правильно понимаю, что при таком выражении $a=Get-ChildItem -Path ${env:ProgramFiles(x86)} -Recurse -Filter File.exe | Foreach {$_.DirectoryName} в переменную А будет присвоен путь к папке?

viko2323 04-04-2016 17:48 2623008

подскажите пожалуйста, что не так? Почему не работает?
$v=get-psdrive -psprovider filesystem | ForEach-Object -process {Get-ChildItem -Recurse -Filter v.exe}
$v

Foreigner 04-04-2016 18:30 2623025

viko2323,
Код:

$v = get-psdrive -psprovider filesystem | foreach {

    get-childitem $_.root v.exe -force -recurse -ea 0

}

$v.directoryname


viko2323 05-04-2016 09:10 2623178

Спасибо за помощь. А что означает в коде
Цитата:

Цитата Foreigner
-ea 0 »


Foreigner 05-04-2016 10:03 2623198

Код:

-erroraction silentlycontinue
Код:

help about_commonparameters

viko2323 05-04-2016 11:11 2623230

Большое спасибо

viko2323 05-04-2016 13:12 2623275

Снова возник вопрос. вроде все работает не не проводит поиск по диску с:\ . В чем проблема?
Код:

$disk=get-wmiobject Win32_LogicalDisk | where {$_.drivetype -eq 3}
$v=$disk | foreach {get-childitem $_.deviceid -recurse -Filter v.exe -force} | Foreach {$_.DirectoryName}
$v


Kazun 05-04-2016 13:16 2623276

Код:

get-childitem "$($_.deviceid)\"

viko2323 05-04-2016 13:23 2623281

Спасибо. А можно на словах в чем разница. Powershell только начал изучать.

Foreigner 05-04-2016 14:34 2623308

Потому что такой синтаксис, попробуйте эти два варианта:
Код:

gci C: windows\notepad.exe
gci C:\ windows\notepad.exe


viko2323 05-04-2016 16:58 2623365

понял спасибо

viko2323 07-04-2016 14:16 2623953

Добрый день. Помогите пожалуйста
Код:

$disk=get-wmiobject Win32_LogicalDisk | where {$_.drivetype -eq 3}
    $v=$disk | foreach {get-childitem "$($_.deviceid)\" -Exclude ${env:windir} -recurse -Filter v.exe -force -ea 0} | Foreach {$_.DirectoryName}
    $v
    Foreach ($_ in $v){Remove-Item  -Recurse -Force}

не могу провести удаление найденого (находит несколько путей) пишет
Remove-Item : Не удается привязать аргумента к параметру "Path", так как он имеет значение NULL

Kazun 07-04-2016 14:18 2623955

Код:

$disk | foreach {get-childitem "$($_.deviceid)\" -Exclude ${env:windir} -recurse -Filter v.exe -force -ea 0 | Remove-Item -Force -Recurse}

viko2323 07-04-2016 14:24 2623958

так понятно, но хотелось бы еще понять на будущее как обрабатывать найденные значения вне конвеера

Kazun 07-04-2016 14:25 2623961

Код:

$disk=get-wmiobject Win32_LogicalDisk | where {$_.drivetype -eq 3}
$v=$disk | foreach {get-childitem "$($_.deviceid)\" -Exclude ${env:windir} -recurse -Filter v.exe -force -ea 0}
Foreach ($i in $v){Remove-Item $i.FullName -Recurse -Force}


viko2323 07-04-2016 14:26 2623964

спасибо

все равно та же ошибка
Remove-Item : Не удается привязать аргумента к параметру "Path", так как он имеет значение NULL.

viko2323 07-04-2016 15:33 2623995

помогите пожалуйста

Foreigner 07-04-2016 15:48 2624002

viko2323, Попробуйте вместо -Path использовать -LiteralPath:
Код:

....{ Remove-Item -literalpath $i.FullName -Recurse -Force }

viko2323 08-04-2016 15:15 2624421

Спасибо не помогло. Немного переделал поиск и все пошло

возникла новая головная боль
Код:

cls
$target = "$env:ProgramFiles\v\v.exe"
$file = "$env:ALLUSERSPROFILE\Start Menu\Programs\V\v.lnk"
$file
$shell = New-Object -comObject Wscript.Shell
$shortcut = $shell.CreateShortcut($file)
$shortcut.TargetPath = $target
$shortcut.Save()

не работает

Исключение при вызове "Save" с "0" аргументами: "Не удается сохранить ярлык "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\V\v.lnk"."
строка:8 знак:15
+ $shortcut.Save <<<< ()
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : ComMethodTargetInvocation

хотя на рабочем столе создает без проблем

Foreigner 09-04-2016 10:31 2624606

Цитата:

Цитата viko2323
Код:

$file = "$env:ALLUSERSPROFILE\Start Menu\Programs\V\v.lnk"

А вы уверены, что у вас указан правильный результирующий путь? У меня например Start Menu расположено так:
Код:

> (gci $env:allusersprofile 'Start Menu' -rec -force -dir -ea 0).fullname
C:\ProgramData\Microsoft\Windows\Start Menu


viko2323 09-04-2016 12:22 2624636

Подскажите пожалуйста как узнать куда ссылается ярлык

Цитата:

Цитата Foreigner
А вы уверены, что у вас указан правильный результирующий путь? У меня например Start Menu расположено так: »

Путь возвращает правильный, просто прежде чем создать там ярлык нужно создать все каталоги пути после $env:ALLUSERSPROFILE\Start Menu\Programs

Foreigner 09-04-2016 13:20 2624656

А какой смысл переносить Start Menu? Если и так есть специально для этого предназначенная папка?
Код:

> [environment]::GetFolderPath('CommonStartMenu')
C:\ProgramData\Microsoft\Windows\Start Menu


viko2323 09-04-2016 13:30 2624661

я ее никуда не переношу

Foreigner 09-04-2016 13:47 2624667

Цитата:

Цитата viko2323
я ее никуда не переношу »

Тогда не понятно почему у вас папка "Start Menu" расположена по другому пути, отличному от штатного (начиная с семерки)

viko2323 11-04-2016 10:26 2625040

Подскажите пожалуйста как узнать куда ссылается ярлык

Foreigner 11-04-2016 12:06 2625078

viko2323
Код:

$shell = new-object -com wscript.shell
$shell.createshortcut('C:\Full\Path\To\file.lnk').targetpath


viko2323 11-04-2016 18:14 2625195

огромное спасибо

viko2323 12-04-2016 08:43 2625299

Добрый день! Подскажите пожалуйста как из этого поиска исключить каталог Windows
Код:

    $disk = get-wmiobject Win32_LogicalDisk | where {$_.drivetype -eq 3}
    $v = $disk | foreach {get-childitem "$($_.deviceid)\" -Include v.exe -recurse -force -ea 0} | Foreach {$_.DirectoryName}


Foreigner 12-04-2016 09:41 2625311

viko2323,
Код:

$v = $disk | foreach {get-childitem "$($_.deviceid)\" -Include v.exe -recurse -force -ea 0} |
    Where { $_.DirectoryName -notmatch '.:\\Windows\\?' } |
    Foreach {$_.DirectoryName}


viko2323 12-04-2016 11:36 2625340

но на сколько я понимаю он же все равно сначала выполнит первый блок
Код:

foreach {get-childitem "$($_.deviceid)\" -Include v.exe -recurse -force -ea 0}
а потом у же отфильтрует

Iska 12-04-2016 12:41 2625363

Это как-то помешает конечному результату?

Foreigner 12-04-2016 13:47 2625388

Напрямую в корне диска не получится откинуть ненужную директорию, поэтому надо менять код:
Код:

$disks = get-wmiobject win32_logicaldisk | where { $_.drivetype -eq 3 } | foreach { $_.deviceid + '\*' }
$v = foreach ($disk in $disks)
{
    get-item $disk -exclude Windows |
    foreach { (get-childitem $_ v.exe -recurse -force).directoryname }
}


viko2323 12-04-2016 15:23 2625422

Iska, это увеличивает время выполнения

Foreigner, спасибо.

viko2323 12-04-2016 15:46 2625432

viko2323, кроме того что нужно возвращает еще мусор
C:\Program Files (x86)\V
C:\
C:\
C:\
C:\
C:\
C:\
C:\
D:\
D:\
D:\
D:\
D:\
D:\
D:\

Foreigner 12-04-2016 17:43 2625467

viko2323, У меня возвращает только ту папку, где искомый файл. Так что не знаю. Разве что у меня отличается, то добавьте -ea 0, в примере забыл.
Код:

...(get-childitem $_ v.exe -recurse -force -ea 0)...

viko2323 14-04-2016 10:01 2625974

Добрый день. Вопрос немного не в тему. При запуске cmd файла с кодом
Код:

powershell.exe " \\domen.loc\dfs\domenInstall\v.ps1"
на компьютерах с WinXP powershell запускается 2 раза. С чем это связано?

viko2323 22-04-2016 16:50 2628658

Добрый день. Есть один интересный вопрос. Есть ли возможность в powershell проводить копирование директорий с файлами (copy-item) с разной глубиной вложений с контролем выполнения и если не скопировалось повторить операцию?

Iska 22-04-2016 17:06 2628667

viko2323:
Цитата:

Темы на форуме организованы по принципу "одна проблема - одна тема", а не "один участник - одна тема".

viko2323 23-04-2016 09:17 2628827

Прошу прощения. Эту тему можно закрывать.

Nordek 23-04-2016 09:27 2628833

Цитата:

Цитата viko2323
Эту тему можно закрывать. »

Если проблема решена, то воспользуйтесь информацией: Как сообщить о том, что моя проблема решена?
Также можете пометить сообщения которые в данном вопросе ("поиск по имени"), ответы которых помогли решить вашу проблему: Как я могу отметить сообщение полезным?


Время: 23:06.

Время: 23:06.
© OSzone.net 2001-