Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - [решено] Перебор жетских дисков в системе, запуск утилиты для каждого из них

Ответить
Настройки темы
Любой язык - [решено] Перебор жетских дисков в системе, запуск утилиты для каждого из них

Новый участник


Сообщения: 3
Благодарности: 0

Профиль | Отправить PM | Цитировать


Всем привет!
Прошу вашей помощи в написании скрипта для групповой политики.
Скрипт должен делать следующее:
Для каждого жесткого диска с назначенной буквой запускать утилиту sdelete.
Данной утилите указывается диск, с которым она должна работать, в следующем виде:
Код: Выделить весь код
sdelete -z [буква диска]:
Наример так:
Код: Выделить весь код
sdelete -z c:
Первая трудность с которой я столкнулся - отсеивание дисков по типу. Утилита не должна запускаться для USB-дисков, дисководов и сетевых дисков.
Попробовал через пакетный файл windows (батник) и утилиту fsutil, но далеко не ушел:
Код: Выделить весь код
@echo off
for %%i in (C D E) do fsutil fsinfo drivetype %%i:
Наверняка данные операции можно коротко и красиво проделать с помощью Powershell. Единственное ограничение для нас - версия не выше 2.0 (она по умолчанию стоит на win server 2008R2).

Если кто-то уже сталкивался с похожей задачей - помогите решением.

Отправлено: 12:10, 20-09-2016

 

Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
Get-WmiObject Win32_LogicalDisk -Filter "DriveType=3 and DeviceID LIKE'%:'" | Foreach {
	C:\utils\sdelete -z $_.DeviceID
}
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:10, 20-09-2016 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Ветеран


Contributor


Сообщения: 2728
Благодарности: 1697

Профиль | Отправить PM | Цитировать


Если принципиально cmd попробуйте
Код: Выделить весь код
@Echo Off
cls
chcp 437 >nul

FOR /F "usebackq tokens=1,*" %%c IN (`fsutil fsinfo drives`) DO Set "AllD=%%d"
Set "AllD=%AllD::\=%"

FOR %%d IN (%AllD%) DO FOR /F "usebackq tokens=3,4" %%i IN (`fsutil fsinfo drivetype %%d:`) DO If "%%i%%j"=="FixedDrive" Echo sdelete -z %%d:

chcp 866 >nul
pause
В боевом варианте Echo уберите, cls и pause тоже

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 20-09-2016 в 22:37.

Это сообщение посчитали полезным следующие участники:

Отправлено: 22:16, 20-09-2016 | #3


Забанен


Сообщения: 793
Благодарности: 260

Профиль | Цитировать


Код: Выделить весь код
@echo off
  for /f %%i in (
    'wmic logicaldisk where^
    "drivetype=3 and deviceid!=null"^
    get deviceid ^| findstr /rc:":"'
  ) do C:\tools\sdelete.exe -z %%i
exit /b
Это сообщение посчитали полезным следующие участники:

Отправлено: 10:34, 21-09-2016 | #4


Новый участник


Сообщения: 3
Благодарности: 0

Профиль | Отправить PM | Цитировать


Всем спасибо за ответы, особенно за решение на Powershell.
Своими силами доделал то, что начал сам. Получилось вот что:
Код: Выделить весь код
@echo off

::Перебираем возможные буквы дисков
for %%a in (A B C D E F G H I J K L N M O P Q R S T U V W X Y Z) do ( 

      ::Отбросив лишнее, записываем в переменную i значение, возвращенное командой fsutil fsinfo drivetype
	for /F "tokens=3" %%i in ('fsutil fsinfo drivetype %%a:') do (

	      ::Если записанное значение совпадает с "†ҐбвЄЁ©" ("Жесткий" в кодировке  CP866) или "Fixed" (для англоязычной версии ОС), запускаем sdelete
		for %%s in (†ҐбвЄЁ© Fixed) do if %%s==%%i start C:\temp\sdelete.exe -z %%a:

Отправлено: 11:54, 21-09-2016 | #5


Ветеран


Contributor


Сообщения: 2728
Благодарности: 1697

Профиль | Отправить PM | Цитировать


totopolis, У нас с Вами в принципе батники сделаны по одной идее. Но я не перебираю все возможные буквы дисков по алфавиту - я список имеющихся в системе дисков получаю посредством fsutil fsinfo drives.
И, что интереснее, если задать кодовую страницу chcp 437, то команда fsutil fsinfo drivetype выдаст статус диска на английском языке, что делает ненужным извращаться в переборе †ҐбвЄЁ© Fixed
Но то, что сделано своими руками, всегда милее

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Отправлено: 20:41, 21-09-2016 | #6



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - [решено] Перебор жетских дисков в системе, запуск утилиты для каждого из них

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Диагностика - Утилиты для жестких дисков Victoria|MHDD и аналоги .:[все вопросы]:. ShaddyR Программное обеспечение Windows 900 25-08-2023 11:42
[решено] тайминг отключения жетских дисков illusionmgs Хочу все знать 11 29-09-2014 15:19
Любой язык - Перебор TXT файлов на рабочем столе и создание жестких ссылок на них в другой папке Balancer Скриптовые языки администрирования Windows 11 08-08-2013 10:41
Создатели первых приложений для Google Glass не смогут извлечь из них прибыль OSZone News Новости информационных технологий 0 13-05-2013 17:30
RAID - raid-1 из 2 дисков. Замена одного из них. kittyla Металлолом 1 21-03-2012 03:26




 
Переход