Компьютерный форум 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=292762)

santey007 19-12-2014 09:40 2445628

удалить все файлы с раб.стола, кроме определенных ярлыков. через КД
 
подскажите, как написать скрипт, что бы удалялось все, с рабочего стола пользователя, кроме определенных ярлыков.
скрипт предполагаю запускать через КД (Logon)

Iska 19-12-2014 10:04 2445630

Цитата:

Цитата santey007
определенных ярлыков. »

Например?

santey007 19-12-2014 10:34 2445636

skype,Google Chrome
хотя я думаю можно оставить вообще все ярлыки пока для начала. удалить только файлы и папки.

sov44 19-12-2014 10:43 2445637

Цитата:

Цитата santey007
удалить только файлы и папки. »

Удалять ярлыки всё-же безопаснее, т.к. некоторые "блондинки" хранят рабочие файлы в папках, созданных на рабочем столе. После удаления папок с документами могут быт проблемы. :)

cameron 19-12-2014 10:43 2445638

нужные ярлыки положить в All Users, тогда удалить их в контексте пользователя будет невозможно.

santey007 19-12-2014 10:55 2445641

sov44 тебя понимаю, но начальство дало указание, убить все безвозвратно(я конечно же бэкапчик то профилей крайний сделаю на КД на всякий). так что можно не бояться...
cameron про ярлыки понял, спасибо за совет, наверно воспользуюсь им перед удалением. я так понимаю так же скрипт нужен, что бы сначала все нужные ярлыки или даже файлики (подключение к RDP, презентация одна) перенести в элюзерс, а потом сносить?

sov44 19-12-2014 10:57 2445643

santey007, вот с ярлыками, просто копирование, Если нужно удаление, думаю сами поправите скрипт
Код:

@echo off
SetLocal enabledelayedexpansion

set "my_lnk=7z_sfx_RU.lnk"

if not exist c:\BackUp_lnk md c:\BackUp_lnk
for /f "delims=" %%a in ('dir/b/ad-h "%userprofile%\..\*"^|findstr/ixvc:"All Users"') do (
for %%b in ("%userprofile%\..\%%a\Desktop\*.lnk") do (
if /i not "%%~nxb"=="%my_lnk%" copy /y "%%b" "c:\BackUp_lnk\"
))
pause
exit


santey007 19-12-2014 11:31 2445653

в скриптах пока мало что понимаю, но думаю наверно так должно быть?
Скрытый текст
@echo off
SetLocal enabledelayedexpansion

set "my_lnk=7z_sfx_RU.lnk"

if not exist c:\BackUp_lnk md c:\BackUp_lnk
for /f "delims=" %%a in ('dir/b/ad-h "%userprofile%\..\*"^|findstr/ixvc:"All Users"') do (
for %%b in ("%userprofile%\..\%%a\Desktop\*.lnk") do (
if /i not "%%~nxb"=="%my_lnk%" delete /y "%%b" "c:\BackUp_lnk\"
))
pause
exit

я так понял он копирует их на С в BackUp_lnk?

sov44 19-12-2014 11:55 2445659

Не проверял. Подстрахуйтесь перед использованием скрипта
удаление всех ярлыков c рабочего стола
Код:

@echo off
SetLocal enabledelayedexpansion

for /f "delims=" %%a in ('dir/b/ad-h "%userprofile%\..\*"^|findstr/ixvc:"All Users"') do (
for %%b in ("%userprofile%\..\%%a\Desktop\*.lnk") do (
del /f /q "%%b"
))
pause
exit

удаление всех файлов и ярлыков с рабочего стола
Код:

@echo off
SetLocal enabledelayedexpansion

for /f "delims=" %%a in ('dir/b/ad-h "%userprofile%\..\*"^|findstr/ixvc:"All Users"') do (
for %%b in ("%userprofile%\..\%%a\Desktop\*") do (
del /f /q "%%b"
))
pause
exit


Iska 19-12-2014 12:03 2445662

Цитата:

Цитата cameron
нужные ярлыки положить в All Users, тогда удалить их в контексте пользователя будет невозможно. »

Тогда их и найти будет невозможно ;). На Рабочем столе пользователя-то.

Цитата:

Цитата santey007
удалить только файлы и папки. »

На WSH:
Скрытый текст
Код:

Option Explicit

Dim objFSO

Dim objFolder
Dim objFile


Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

With objFSO.GetFolder(WScript.CreateObject("WScript.Shell").SpecialFolders.Item("Desktop"))
        For Each objFolder In .SubFolders
                WScript.Echo objFolder.Path
                'objFolder.Delete True
        Next
       
        For Each objFile In .Files
                Select Case LCase(objFSO.GetExtensionName(objFile.Name))
                        Case "lnk", "url"
                                ' Nothing to do
                        Case Else
                                WScript.Echo objFile.Path
                                'objFile.Delete True
                End Select
        Next
End With

Set objFSO = Nothing

WScript.Quit 0


Для удаления раскомментируйте помеченные красным строки. Чтобы не выводились сообщения, закомментируйте или удалите помеченные зелёным строки.

cameron 19-12-2014 12:13 2445664

Цитата:

Цитата Iska
Тогда их и найти будет невозможно . На Рабочем столе пользователя-то. »

это почему?

sov44 19-12-2014 12:41 2445679

santey007, немного модернизировал скрипт, пробуйте. Для "боевого" запуска убрать echo
Код:

@echo off
SetLocal enabledelayedexpansion

for /f "delims=" %%a in ('dir/b/ad-h "%userprofile%\..\*"^|findstr/ixvc:"All Users"') do (
for  %%b in ("%userprofile%\..\%%a\Desktop\*") do echo del /f /q "%%b"
for /d %%c in ("%userprofile%\..\%%a\Desktop\*") do echo rd /s /q "%%c"
)
pause
exit

Соглашусь с Iska. Скопировал ярлык с рабочего стола пользователя в c:\Users\Default\Desktop, ярлыка из-под пользователя не увидел. Скопировал в c:\Users\Public\Desktop, ярлык виден и прекрасно удаляется из-под пользователя.
All Users он как-бы есть, но перебрасывает в Public

Iska 19-12-2014 12:51 2445687

cameron, Georgio, ну, задача-то какая была:
Цитата:

Цитата santey007
с рабочего стола пользователя »

а ежели ярлыки переместим с Рабочего стола пользователя на общий Рабочий стол, то стало быть на Рабочем столе пользователя мы их и не найдём ;).

Для пропуска определённых ярлыков:
Скрытый текст
Код:

Option Explicit

Dim objFSO
Dim objWshShell
Dim objDictionary

Dim objFolder
Dim objFile


Set objFSO        = WScript.CreateObject("Scripting.FileSystemObject")
Set objWshShell  = WScript.CreateObject("WScript.Shell")
Set objDictionary = WScript.CreateObject("Scripting.Dictionary")

With objDictionary
        .Add "C:\Program Files\Google\Chrome\Application\chrome.exe", ""
        .Add "C:\Program Files\Mozilla Firefox\firefox.exe", ""
End With

With objFSO.GetFolder(objWshShell.SpecialFolders.Item("Desktop"))
        For Each objFolder In .SubFolders
                WScript.Echo objFolder.Path
                'objFolder.Delete True
        Next
       
        For Each objFile In .Files
                Select Case LCase(objFSO.GetExtensionName(objFile.Name))
                        Case "lnk"
                                If Not objDictionary.Exists(objWshShell.CreateShortcut(objFile.Path).TargetPath) Then
                                        WScript.Echo objFile.Path
                                        'objFile.Delete True
                                End If
                        Case Else
                                WScript.Echo objFile.Path
                                'objFile.Delete True
                End Select
        Next
End With

objDictionary.RemoveAll

Set objDictionary = Nothing
Set objWshShell  = Nothing
Set objFSO        = Nothing

WScript.Quit 0



Цитата:

Цитата sov44
Скопировал ярлык с рабочего стола пользователя в c:\Users\Default\Desktop, ярлыка из-под пользователя не увидел. »

На Рабочем столе пользователя Вы должны его увидеть. Причём даже два ярлыка, поскольку скопировали, а не переместили.

Я имел в виду, что мы не найдём в папке, которая отображается на Рабочий стол пользователя.

santey007 19-12-2014 13:57 2445726

а как заодно права развесить на рабочий стол только на чтение?что бы не смогли больше ничего туда сохранять?

Iska 19-12-2014 14:02 2445727

Цитата:

Цитата santey007
а как заодно права развесить на рабочий стол только на чтение?что бы не смогли больше ничего туда сохранять? »

Не делайте этого.

santey007 19-12-2014 14:09 2445730

почему?

Iska 19-12-2014 14:13 2445734

Если будете очищать — какой смысл? А через неделю-другую пользователи и сами привыкнут к тому, что сохранять на Рабочий стол бесполезно.

santey007 22-12-2014 08:55 2446711

да просто мозг будут выносить: опять сохранил файл на раб. стол, опять забыл его перенести, а это отчет, верни срочно! -вот этого хочу избежать

Anton04 22-12-2014 23:23 2447028

Цитата:

Цитата santey007
да просто мозг будут выносить: опять сохранил файл на раб. стол, опять забыл его перенести, а это отчет, верни срочно! -вот этого хочу избежать »

А вот это решается административными методами, т.е. бумажками с соответствующими подписями. ;)

santey007 23-12-2014 08:37 2447124

не работают бумажки вообще никак, проверено уже давно и ни раз...

santey007 20-01-2015 15:44 2458871

наконец дошли руки, т.к. вопрос встал остро
sov44 ваш скрипт не работает(
Iska ваш скрипт с пропуском определенных ярлыков работает на половину. он удаляет файлы все с раб стола, но не трогает ярлыки вообще никакие.
помогите сделать корректный скрипт пожалуйста

Iska 20-01-2015 17:42 2458926

Цитата:

Цитата santey007
Iska ваш скрипт с пропуском определенных ярлыков работает на половину. он удаляет файлы все с раб стола, но не трогает ярлыки вообще никакие. »

А эти «никакие ярлыки» точно лежат физически на Рабочем столе пользователя, а? А не на Общем для всех пользователей Рабочем столе?

santey007 21-01-2015 08:33 2459149

да уверен.
1-если создаю просто файлы на раб.столе, то чистит без проблем
2-если я создаю файл на рабочем столе и делаю тут же ярлык к нему, то при запуске скрипта файл убивает и выдает сообщение (просто путь к ярлыку) и все, ярлык не удаляет. при повторном запуске скрипта уже никаких сообщении не выдает и опять же ярлыки не трогает
3-если я создаю файл на другом диске и делаю ярлык на раб стол для него, то при запуске скрипта выдает опять сообщение (просто путь к ярлыку) и все. при повторном запуске уже ничего не выдает и опять же не удаляет

Iska 21-01-2015 10:36 2459184

Цитата:

Цитата santey007
выдает сообщение (просто путь к ярлыку) и все, »

Вы раскомментировали само удаление — как я писал в последнем абзаце вот в этом посте данной темы? Покажите Ваш код.

santey007 21-01-2015 11:07 2459194

сори увидел косяк, одну строку не закомментировал, а другую не раскомментировал (внизу эти 2 строки были, незаметил)

а как теперь права развесить на раб стол пользователя? что бы не сохраняли на него ничего?

Iska 21-01-2015 11:50 2459210

Цитата:

Цитата santey007
правильно сделал? »

Почти. Кое-что пропустили при этом ;).
Скрытый текст
Код:

Option Explicit

Dim objFSO
Dim objWshShell
Dim objDictionary

Dim objFolder
Dim objFile


Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
Set objWshShell = WScript.CreateObject("WScript.Shell")
Set objDictionary = WScript.CreateObject("Scripting.Dictionary")

With objDictionary
        .Add "C:\Program Files\Google\Chrome\Application\chrome.exe", ""
        .Add "C:\Program Files\Mozilla Firefox\firefox.exe", ""
End With

With objFSO.GetFolder(objWshShell.SpecialFolders.Item("Desktop"))
        For Each objFolder In .SubFolders
                objFolder.Delete True
        Next
       
        For Each objFile In .Files
                Select Case LCase(objFSO.GetExtensionName(objFile.Name))
                        Case "lnk"
                                If Not objDictionary.Exists(objWshShell.CreateShortcut(objFile.Path).TargetPath) Then
                                        WScript.Echo objFile.Path
                                        'objFile.Delete True
                                End If
                        Case Else
                                objFile.Delete True
                End Select
        Next
End With

objDictionary.RemoveAll

Set objDictionary = Nothing
Set objWshShell = Nothing
Set objFSO = Nothing

WScript.Quit 0


И — то же самое:
Цитата:

Для удаления раскомментируйте помеченные красным строки. Чтобы не выводились сообщения, закомментируйте или удалите помеченные зелёным строки.

santey007 21-01-2015 12:08 2459221

увидел косяк, исправил все ок.
еще моменты, как бы оставить файлик рдп подключения или любой другой файл или папку которую необходимо оставить? и развесить права на раб стол, что бы больше не сохраняли туда ничего?

Iska 21-01-2015 14:41 2459268

Цитата:

Цитата santey007
как бы оставить файлик рдп подключения »

Можно.

Цитата:

Цитата santey007
или любой другой файл »

Можно.

Цитата:

Цитата santey007
или папку которую необходимо оставить? »

Тоже можно.

Пробуйте (не проверялось):
Скрытый текст
Код:

Option Explicit

Dim objFSO
Dim objWshShell

Dim objDictionaryExcludeFolders
Dim objDictionaryExcludeFiles
Dim objDictionaryExcludeShortcuts

Dim objFolder
Dim objFile


Set objFSO        = WScript.CreateObject("Scripting.FileSystemObject")
Set objWshShell  = WScript.CreateObject("WScript.Shell")

Set objDictionaryExcludeFolders  = WScript.CreateObject("Scripting.Dictionary")
Set objDictionaryExcludeFiles    = WScript.CreateObject("Scripting.Dictionary")
Set objDictionaryExcludeShortcuts = WScript.CreateObject("Scripting.Dictionary")

With objDictionaryExcludeFolders
        .Add "Новая папка", ""
        .Add "Новая папка (2), ""
        .Add "Новая папка (3), ""
        .Add "От создателей Новая папка, Новая папка (2) и Новая папка (3) — Новая папка (4)", ""
End With

With objDictionaryExcludeFiles
        .Add "MyFile.txt", ""
        .Add "MyFile2.txt", ""
End With

With objDictionaryExcludeShortcuts
        .Add "C:\Program Files\Google\Chrome\Application\chrome.exe", ""
        .Add "C:\Program Files\Mozilla Firefox\firefox.exe", ""
End With


With objFSO.GetFolder(objWshShell.SpecialFolders.Item("Desktop"))
        For Each objFolder In .SubFolders
                If Not objDictionaryExcludeFolders.Exists(objFolder.Name) Then
                        WScript.Echo objFolder.Path
                        'objFolder.Delete True
                End If
        Next
       
        For Each objFile In .Files
                If Not objDictionaryExcludeFiles.Exists(objFile.Name) Then
                        Select Case LCase(objFSO.GetExtensionName(objFile.Name))
                                Case "lnk"
                                        If Not objDictionaryExcludeShortcuts.Exists(objWshShell.CreateShortcut(objFile.Path).TargetPath) Then
                                                WScript.Echo objFile.Path
                                                'objFile.Delete True
                                        End If
                                Case Else
                                        WScript.Echo objFile.Path
                                        'objFile.Delete True
                        End Select
                End If
        Next
End With

objDictionaryExcludeFolders.RemoveAll
objDictionaryExcludeFiles.RemoveAll
objDictionaryExcludeShortcuts.RemoveAll

Set objDictionaryExcludeFolders  = Nothing
Set objDictionaryExcludeFiles    = Nothing
Set objDictionaryExcludeShortcuts = Nothing

Set objWshShell  = Nothing
Set objFSO        = Nothing

WScript.Quit 0


Убрал, кстати, «"url"» — там была бы ошибка, для них нужна иная логика.

Цитата:

Цитата santey007
и развесить права на раб стол, что бы больше не сохраняли туда ничего? »

Развешивайте. Я своё мнение на этот счёт, помнится, высказывал выше. Отрицательное.

santey007 03-02-2015 12:02 2465647

все супер скрипт отрабатывает. вопрос: как его запустить определенным пользователям? а не всем

santey007 04-02-2015 10:53 2466129

есть мысли?


Время: 01:40.

Время: 01:40.
© OSzone.net 2001-