Показаны сообщения с ярлыком консоль. Показать все сообщения
Показаны сообщения с ярлыком консоль. Показать все сообщения

19 мая 2015 г.

Удобная настройка автозагрузки из консоли в Debian

Для управления демонами, стартующими при загрузке сервера, в Debian существует утилита update-rc.d. Но её использование не особо наглядно и удобно.

Можно установить тулзы для управления автозагрузкой с использованием ncurses - rcconf и sysv-rc-conf:

aptitude install rcconf sysv-rc-conf

Далее запускаем sysv-rc-conf:


В принципе, сверху и снизу написаны команды управления:
[Пробел] - устанавливаем/убираем загрузку на выбранном стрелками уровне исполнения, 
[=] - можно запустить сразу выбранный сервис, 
[-] - остановить выбранный сервис.

А вот пример использования утилиты rcconf:

28 июл. 2014 г.

PostgreSQL как посмотреть, где хранятся файлы БД на Linux-машине

Тема на 5 минут. Если сервер настраивался не вами, то бывает сразу сложно разобраться, где лежат файлы БД PostgreSQL, т. к. их расположение может быть настроено отличным, от по-умолчанию, образом.

Поможет в этом следующая консольная команда:

ps auxw | grep postgres | grep -- -D

в итоге, мы получим  нечто на подопбии такого:

postgres 12917  0.0  0.1 118783 60648 ?        S    Jul27   0:01 /usr/pgsql-9/bin/postgres -D /data/postgres-9

Вот после опции -D и указан каталог, в котором лежат файлы БД (обычно в подпапке base).

7 июл. 2014 г.

Удаленное выполнение команд на Windows

Для удаленного выполнения команд в Windows есть отличная штука - PsExec. Принципиально похожа на линуксовый SSH. Эта утилита работает со всеми версиями Windows, начиная с XP (XP, 2003, Vista, 2008, 7,8, 2012).

Итак, на локальной машине скачиваем утилиту (точнее, набор утилит), с сайта Microsoft Technet и распаковываем, например, в папку C:\PSTools.
Далее, открываем консоль путем [Win+R] или Пуск - Выполнить - cmd.
Переходим в распакованную папку:

cd C:\PSTools

Теперь мы можем выполнять команды на удаленной Windows машине, запуская psecex в таком формате:

psexec \\remote_name_or_ip -u user -p password command

На удаленной машине должны быть запущены службы Server и Workstation.

Вот так - из-коробки - работает только на Windows 2003/XP. В версиях начиная с Vista из-за другого механизма доступа (UAC и т. д.), необходимо немного "пошаманить".

На удаленной машине под управлением Windows Vista или поздней открываем Редактор Реестра (Start - Run - regedit) и создаём ключ реестра HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\LocalAccountTokenFilterPolicy типа DWORD и со значением 1.

Всё, теперь можно выполнять команды и на удаленной Vista+ системе, выполняя следующую команду:

psexec \\remote_name_or_ip -u user -p password -h command

Флаг -h нужен, чтобы запустить команду от имени Администратора.

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

А для того, чтобы получить шелл на удаленной машине, выполняем команду:

psexec \\remote_name_or_ip -u user -p password -h cmd

Ссылки:

  1. http://technet.microsoft.com/en-us/sysinternals/bb897553.aspx
  2. http://forum.sysinternals.com/faq-common-pstools-issues_topic15920.html
  3. http://stackoverflow.com/questions/828432/psexec-access-denied-errors

30 мая 2014 г.

Решение проблемы с извлечением дисков в Linux

Если привод компакт-дисков не реагирует на нажатие кнопки извлечения, то следует открыть консоль и попробовать выполнить следующую команду от root или с sudo:

eject /dev/cdrom

Если, при этом выдаётся следующая ошибка:

eject: unable to eject, last error: Inappropriate ioctl for device

То нужно попробовать следующую последовательность команд:

file /dev/sr0

должна выдать такой результат:

/dev/sr0: sticky block special

Далее:

eject -i off

После этого диск должен извлечься при нажатии кнопки на дисководе.

Ссылки:

14 мар. 2014 г.

Определение и вызов fabric task в одном Python скрипте

Библиотека fabric для Python является хорошим средством для автоматизации действий (админимстрирования, deployment и т. д.) для инфраструктуры серверов под управлением ОС Linux. Библиотека использует протокол open ssh для выполнения команд и перемещения данных.

Подробнее о библиотеке можно прочитать на официальном сайте или здесь.

Бывают ситуации, когда необходимо в одном скрипте и объявить таск из библиотеки fabric и выполнить его.

Пример структуры такого скрипта:

#!/usr/bin/env python
# Script dependencies: python-devel, fabric (https://github.com/fabric/fabric/archive/master.zip)
# Usage: python script.py
import fabric
from fabric.api import *
# Define ssh-like address user@server_hostname
remote_host = user@server

def some_fab_task():
    # Define fabric task here
    # hide('everything') helps to execute task with minimum output to console
    with settings(hide('everything')):
        try:
           ....
        except:
           ....

# Main function
if __name__ == '__main__':
    # Call fabric task from here
    fabric.tasks.execute(some_fab_task, hosts=[remote_host])

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

Update:

Для передачи аргументов в скрипт, указываем их перед hosts=.


fabric.tasks.execute(some_fab_task, arg1, arg2, hosts=[remote_host])

Для передачи xargs, можно указывать их также до или после hosts=


fabric.tasks.execute(some_fab_task, arg1, arg2, hosts=[remote_host], xarg1=value1)

6 мар. 2014 г.

Автоматизация скриптов с помощью expect

Недавно открыл для себя интересную консольную утилиту expect. Сия утилита является интерпретатором (со своим языком) для взаимодействия с интерактивными (т. е. требующими какого-либо ввода от пользователя) программами.

Дабы не писать много лишнего, рассмотрим использование expect на примере.

Допустим,
  • есть удалённый sftp-сервер с адресом 192.168.1.2, 
  • к которому у нас есть доступы вида user/SECRET, порт 20022,
  • нам нужно автоматически брать с этого сервера файл вида TODAYDATE_smtng_important.txt, где TODAYDATE - текущая дата вида YYYYMMDD, 
  • файлик лежит в корневой директории.
При авторизации на sftp-сервере требуется ввод пароля, который никак ни опцией ни указать, ни ключ не прокинуть (предположим, нет административного доступа на sftp-сервер).

Вот именно здесь в автоматизации этой задачи поможет нам линуксовая консольная утилита expect.

создаем файл get_file.sh со следующим содержимым:

#!/usr/bin/expect
# Script to get important file from sftp quetly. Uses expect (yum install expect -y)
# Usage: ./get_file.sh YYYYMMDD
# where YYYYMMDD - today's date

set today [lindex $argv 0]
spawn sftp -oPort=20022 user@192.168.1.2:${today}_smtng_important.txt /home/user/${today}_smtng_important.txt
expect "password:"
send "SECRET\n";
interact

Строки после комментария:
  1. Создаем переменную today, присваивая ей первый аргумент, переданный скрипту при запуске.
  2. Выполняем команду для подключения к sftp, где вместо ${today} интерпретатор вставляет значение даты (переданное скрипту)
  3. Далее скрипт ждет указанного запроса (prompt) - здесь возможно много вариантов, в т. ч. и таймауты и различные prompt-ы, об этом можно прочитать в мане или в более расширенных статьях.
  4. Получив указанный выше промпт, посылаем в ответ наш пароль и знак окончания строки (аналог нажатия пользователем [Enter])
  5. Далее скрипт полностью передает управление пользователю.
Запускать скрипт, понятное дело после chmod o+x, например так:

./get_file.sh 20142902

Минусом изложенного подхода, конечно же, является хранение пароля для sftp в открытом, не зашифрованном виде.

Ссылки:

  1. Хорошая статья по командам expect
  2. Туториал по expect
  3. Ман по sftp в Linux


13 февр. 2014 г.

Установка системы мониторинга Nagios Core 4 на Linux Debian 6

Недавно возникла необходимость установить систему мониторинга Nagios Core 4 на сервер под управлением Linux Debian 6 (Squeeze). Здесь изложу свой опыт. В принципе, на Debian 7, Ubuntu, а также RHEL-ы (CentOS, Oracle Linux, Fedora) Nagios ставится походим образом. Необходимо лишь учитывать особенности путей на этих системах и наименования пакетов для установки.

Подробнее про Nagios, различие его редакций и т. д. можно прочитать на официальном сайте проекта.

Планируется установить следующие компоненты:

  • Nagios Core, 
  • Nagios Plugins, 
  • NRPE, 
  • Nagios V-Shell (симпатичный фронт-энд для Nagios Core). 

Установить можно как из пакетов, так и путём компиляции из исходников. В данной статье использован второй метод, т. к. он обеспечивает инсталляцию наиболее последней версии Nagios, а так же лучшую интеграцию компонентов между собой.

22 янв. 2014 г.

Автодополнение в командной строке Linux

Автодополнение в командной строке Linux - это крайне удобная вещь. Вот скажем, нужно вам посмотреть информацию о пакете, скажем, php-mcrypt, но вы не помните как точно он пишется. С автодополнением достаточно в команде написать первые буквы и двойное нажатие [TAB] покажет вам варианты, а одинарное - дополнит, если вариант единственный:

rpm -q ph [TAB][TAB]

phonon-backend-gstreamer  php-devel                 php-mysql
php                       php-gd                    php-pdo
php-cli                   php-mbstring              php-xml
php-common                php-mcrypt                

Эта полезная фишка содержится в пакете bash-completion. При установке Debian-based систем этот пакет устанавливается по-умолчанию.А во многих же RHEL-дистрибутивах (например, Oracle Linux) - почему-то нет. Устанавливаем командой:

yum install bash-completion
aptitude install bash-completion

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

ls /etc/bash_completion.d

autoconf       gdbus-bash-completion.sh      mysqladmin        scl.bash
automake       getent                        ncftp             screen
bash-builtins  gpg2                          net-tools         service
bind-utils     gsettings-bash-completion.sh  nmap              sh
brctl          gzip                          ntpdate           shadow
bzip2          iconv                         openssl           smartctl
chkconfig      iftop                         perf              sqlite3
configure      ifupdown                      perl              ssh
coreutils      info                          pkg-config        strace
cpan2dist      iproute2                      pm-utils          subversion
cpio           iptables                      postfix           tar
crontab        java                          procps            tcpdump
cryptsetup     lsof                          python            util-linux
cups           lvm                           qdbus             wireless-tools
cvs            lzma                          quota-tools       xmllint
dd             make                          redefine_filedir  xmlwf
dhclient       man                           rfkill            xsltproc
e2fsprogs      mc                            rpcdebug          xz
findutils      mdadm                         rpm               yp-tools
gcc            minicom                       rsync             yum.bash
gdb            module-init-tools             samba             yum-utils.bash

15 янв. 2014 г.

Как перенаправить порт в Windows встроенными средствами

Перенаправление порта (port forwarding, port mapping) может понадобиться, когда у машины PC1 есть доступ в сеть 1 и сеть 2, а у машины PC1 - только в сеть 1, а ей нужно подключиться к какому-то сервису на машине PC3 в сети 2. В таком случае схема будет примерно такая:


В данном примере необходимо на PC2 открыть CMD с правами администратора и выполнить команду:

netsh interface portproxy add v4tov4 listenport=2222 listenaddress=192.168.1.3 connectport=22 connectaddress=192.168.2.5

Чтобы удалить форвардинг - команда:

netsh interface portproxy delete v4tov4 listenport=2222 listenaddress=192.168.1.3

Ссылки:

http://technet.microsoft.com/en-us/library/cc731068(v=ws.10).aspx#BKMK_1

9 янв. 2014 г.

Отправка почты (e-mail) из консоли Linux

Иногда необходимо отправить письмо из консоли/скрипта в Linux. Сделать это достаточно просто:

echo "Тело письма" | mail -s "Тема письма" recipient@example.com

или, чтобы вставить содержимое тектового файла как тело письма:

mail -s "Тема письма" recipient@example.com < /var/log/some.log

Параметры команды:

-s subject - тема письма
-c email-address 
- адрес для копии
-b email-address - 
адрес для невидимой копии

20 дек. 2013 г.

Linux Out-of-Memory Killer (OOM)

OOM Killer - это компонент ядра Linux, призванный решать проблему недостатка памяти. Известно, что виртуальной памяти может быть бесконечно много (в пределах адресации), а вот физической - вполне конечное число. Ядро выделяет память процессам "с запасом" в сумме превышающую физическую память системы. В основном, всё разруливается нормально (вся выделенная память одновременно редко требуется), но бывает ситуация когда становится нужно памяти больше, чем ее физически есть. И системе тогда нужно завершить какой-то процесс, чтобы продолжить работу. Вот этим и занимается OOM Killer.

Текущая реализация OOM Killer в Linux стремится выбрать наименее важный процесс. Он выбирается среди всех процессов, кроме init и kernel threads, на основе подсчета для всех процессов очков и тот, что набрал больше всех очков - убивается. Алгоритм анализа достаточно сложен и я не буду его приводить здесь.

Бывает, необходимо защитить определенный, важные процессы от "убиения". В конце подсчета очков для процесса, число возводится в степень приоритета, которая может принимать значения -15...15 или -17. "-17" означает, что процесс не будет принудительно завершен вообще. Значение приоритета хранится в файлике /proc/$PID/oom_adj. Т. е. этот файлик создается для каждого процесса и уничтожается с его завершением.

Соответственно, дабы защитить процесс от "убиения", необходимо узнать PID этого процесса и записать в его файл oom_adj значение -17. Например, для процесса sshd, можно использовать команду:

pgrep -f "/usr/sbin/sshd" | while read PID; do echo -17 > /proc/$PID/oom_adj; done

Эта команда для всех процессов демона sshd назначает приоритет. Но нужно быть осторожным с приоритетами - система может вести себя непредсказуемо, если защищенный таким образом процесс займет всю память (скорее всего закончится это т. н. kernel panic). Поэтому рекомендуют ставить минимальный приоритет "-15".

Приведенную выше команду нужно выполнять после запуска процесса, т. е. или в конце стартового скрипта или по cron-у.

Ссылки на более детальную информацию:

19 дек. 2013 г.

Ошибка 0x0000005 при запуске практически всех приложений в Windows 7 x64

Бывает, после установки обновлений и последующей перезагрузки появляется ошибка 0x0000005 при запуске практически всех приложений в Windows 7 x64

Причина кроется в обновлениях KB2859537 и KB2872339 (или одном из них) на некоторых системах  Windows 7 x64.

Но апплет Центра обновлений запустить нельзя, т. к. все 32-битные приложения не запускаются в системе. Чтобы удалить обновления, запускаем командную строку с правами Администратора и удалем обновления командами:

wusa.exe /uninstall /kb:2859537
wusa.exe /uninstall /kb:2872339

Перезагружаемся - и система должна работать как раньше.

Кстати, не забываем скрыть эти обновления после перезагрузки дабы потом случайно опять их не поставить (в Центре обновления Windows правой кнопкой на обновлении - Скрыть обновление)

22 нояб. 2013 г.

Полезные Bash Shell команды и однострочные скрипты

Т. к. количество всяких полезный команд и скриптиков для консоли Linux неуклонно растет и всех их не упомнишь, буду записывать сюда что-нибудь эдакое полезное.

Статья будет дополняться.

1. Сделать что-либо со всеми файлами в папке, например, распаковать все zip архивы в текущей папке:

for f in *.zip ; do unzip $f ; done

2. То же самое, только с файлами из поддиректорий текущей. Например, установить rpm пакеты:

for D in *; do [ -d "${D}" ] && yum install ${D}/*.rpm ; done

3. Добавить пользователя в группу:

usermod -a -G group user

4. Как расшарить содержимое папки по протоколу HTTP.
Заходим в нужную папку и выполняем команду:

python -m SimpleHTTPServer 8080

Далее зайдя в браузере по адресу http://ip_of_that_server:8080, мы увидим содержимое с возможностью навигации и скачивания файлов:

5. Получение информации о Virtual Hosts для apache2 в Debian Linux:

apache2ctl -t -D DUMP_VHOSTS

6. Создание файла заданного размера:

truncate -s 14M filename

7. Замена строчек в текстовом файле:

sed -Ei 's/foo|bar|baz/foobar/g' file

Заменить foo, bar или baz на foobar

8. Подмонтировать CD-ROM с указанием типа файловой системы:

mount -t iso9660 /dev/scd0 /media/cdrom

25 окт. 2013 г.

Полезные команды Asterisk (буду дополнять)


1. Переполнение памяти SMS

Если нужно принять SMS-ку, а в консоли (asterisk -rvv) пишет следующее:

ERROR[15627]: at_response.c:1420 at_response_smmemfull: [dongle0] SMS storage is full

то, логично - нам необходимо почистить память для смс-ок.
Есть два вида памяти: 
  • память SIM
  • память модема
Для очистки памяти SIM применяем в консоли астериска последовательно команды:

dongle cmd <dongle_name> AT+CPMS=\"SM\",\"SM\",\"SM\" 
dongle cmd <dongle_name> AT+CMGD=1,4

Для очистки памяти модема применяем в консоли астериска последовательно команды:

dongle cmd dongle_name AT+CPMS=\"ME\",\"ME\",\"ME\" 
dongle cmd dongle_name AT+CMGD=1,4

Консолька нам выдасть что-то типа:

[dongle_name] 'AT+CMGD=1,4' Command queued for execute
[dongle_name] Got Response for user's command:'OK'
[Oct 25 07:41:57] NOTICE[15627]: at_response.c:1714 at_response: [dongle_name] Got Response for user's command:'OK'

Всё прошло гладко. Теперь можно принимать SMS-ки.

19 июл. 2013 г.

Удаление старых файлов одной командой в Linux

С помощью команды find легко удалять или перемещать или копировать файлы, с датой модификации старше заданной. Удобно помещать такую команду в cron.

Например, для файлов старше 5 дней:

find /path/to/files* -mtime +5 -exec rm {} \;

Для файлов, измененных в пределах 24...48 часов:

find /path/to/files* -mtime 1 -exec rm {} \;

Это версия для Debian, на RHEL надо писать чуть по-другому:

find /path/to/files* -mtime +0 -exec rm {} \;

Создать файлы для тестирования можно командой (например, дата 2 апреля):

touch -d '2 Apr' /path/to/test_file

17 июл. 2013 г.

Борьба со спамом средствами Postfix

В этой статье постараюсь изложить свой опыт по настройки MTA Postfix для максимальной фильтрации спама и нежелательных писем встроенными средствами и средствами модулей Postfix'а. Настройка Amavis, Spamassassin, Clam и т. п. отдельных средств фильтрации спама выходит за рамки данной статьи и я возможно напишу об этом позже.

Входные данные:
  • сервер под управлением ОС Debian 7, 
  • Postfix 2.9.x, 
  • домен: example.com, 
  • внешний IP - 222.222.222.222, 
  • внутренняя сеть - 192.168.1.0/24, 192.168.2.0/24. 
Считаю, что постфикс у вас уже настроен в плане авторизации, почтовых ящиков и прочего хозяйства.

Основной файл, где настраивается фильтрация спама, это main.cf

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

mynetworks = 127.0.0.0/8, 192.168.1.0/24, 192.168.2.0/24

Далее следуют проверки HELO, т. к. многие спаммеры или пропускают команду SMTP HELO или посылают заведомо неверные данные.

smtpd_delay_reject = yes 
smtpd_helo_required = yes 
smtpd_helo_restrictions = permit_mynetworks, 
    permit_sasl_authenticated, 
    check_helo_access hash:/etc/postfix/helo_access, 
    reject_non_fqdn_hostname, 
    reject_invalid_hostname, 
    permit

15 июл. 2013 г.

Asterisk и NAT

В общем, после долгих сношений с двумя понятиями - Asterisk + NAT решил запечатлить свой опыт здесь - может потом пригодиться мне или еще кому-нибудь.

Есть несколько сценариев работы * с НАТом в зависимости от того, находится сервер и/или клиенты за НАТом. НО. В каждом конкретном случае приходится "шаманить", т. к. стандартные рецепты не всегда помогают.

У меня был самый тяжелый случай - и сервер Asterisk и клиенты находятся за НАТами... разными НАТами.

Вариантов тут может быть два:

- настроить всю кухню так, что телефоны будут подклучаться к * через свой НАТ, интернет и НАТ сети с * (т. е. путь будет такой: телефон --> НАТ  --> интернет  --> НАТ  --> астериск);

- установить второй сервер * внутри сети, где телефоны и связать 2 сервера * IAX транком - именно IAX, т. к. он более приспособлен для работы через НАТ (путь будет: телефон --> астериск2 --> IAX-транк --> астериск1).

Но, т. .к. настоящие герои всегда идут в обход (с), я решил делать вариант номер 1.

Итакс, начнемс.

22 июн. 2013 г.

Монтирование разделов Windows в Linux без root или sudo

Тема на 5 минут - как примонтировать обычному пользователю разделы Windows (ntfs).
Создаем папки, куда будем монтировать. Например в хомяке пользователя, с правами ему.

mkdir /home/user/C
mkdir /home/user/D
chown user:user /home/user/C
chown user:user/home/user/D

Далее дописываем в файл:

nano /etc/fstab

/dev/sda2       /home/user/C    ntfs-3g defaults 0 0
/dev/sda5       /home/user/D    ntfs-3g defaults 0 0

Пути к устройствам - заменить на ваши. После перезагрузки диски будут примонтированы и user сможет их использовать.

Кстати, для работы с ntfs разделами, в системе должен быть установлен пакет ntfs-3g.

17 мая 2013 г.

Просмотр подробной информации о сетевой карточке в Linux

Недавно нужно было узнать параметры карточки на удаленном сервере (под управлением Linux). А точнее, её модель. Команды

ethtool -i eth0
miitool -vv eth0

показывают версию или драйвера или чипа. Но нашел способ узнать побольше о карточке, как оказалось достаточно очевидный:

lspci -vv | egrep -i --color 'network|ethernet'

Здесь мы получим информацию наподобии такой:

07:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller (rev 06)

Цифры вначале - адрес устройства на шине PCI. Берем его и пихаем аргументом в команду:

lspci -vv -s 07:00.0

Вот теперь мы можем посмотреть максимум о карточке.

5 апр. 2013 г.

Скрипт для отключения не используемых служб в Windows Server 2012

Удобная штука - скрипты. Можно делать однообразную работу одним кликом или нажатием или вообще планировщиком... Но последний вариант не актуален в этом случае.

Скрипт будет на языке PowerShell и видение того, какие службы не нужные здесь я привёл свое, так что список служб надо подредактировать под свои нужды.

Получить список сервисов с их короткими именами можно командой в оболочке PowerShell:

Get-service

Собсно, сам скрипт:


$DisabledServicesList = @("ALG", "BFE", "BITS", "Browser", "CertPropSvc", "CryptSvc", "defragsvc", "Dnscache", "DPS", "EFS", "FontCache", "gpsvc", "hidserv", "hkmsvc", "IKEEXT", "iphlpsvc", "KeyIso", "KPSSVC", "KtmRm", "lltdsvc", "MMCSS", "MpsSvc", "MSiSCSI", "napagent", "NcaSvc", "Netlogon", "NetTcpPortSharing", "PerfHost", "pla", "PolicyAgent", "PrintNotify", "RasAuto", "RasMan", "RemoteAccess", "RemoteRegistry", "sacsvr", "SCardSvr", "SENS", "SharedAccess", "ShellHWDetection", "SNMPTRAP", "Spooler", "Themes", "TrkWks", "UALSVC", "UI0Detect", "VaultSvc", "vmicheartbeat", "vmickvpexchange", "vmicrdv", "vmicshutdown", "vmictimesync", "vmicvss", "W32Time", "WcsPlugInService", "WdiServiceHost", "WdiSystemHost", "Wecsvc", "wercplsupport", "WerSvc", "WinHttpAutoProxySvc", "wmiApSrv", "WPDBusEnum", "wudfsvc", "wuauserv", "ScDeviceEnum")

$ManualServicesList = @("AeLookupSvc","seclogon", "SstpSvc")

foreach ($service in $DisabledServicesList)
{
Set-Service -name $service -StartupType Disabled
Stop-Service -force -name $service
}
foreach ($service in $ManualServicesList)
{
Set-Service -name $service -StartupType Manual
}
Создаем массив строк с названиями служб, которые хотим вырубить и можно еще второй - какие поставить в Manual. А далее обрабатываем их в циклах.

Для использования или копируем текст скрипта в окно PowerShell (запущенное с администраторскими правами, ессно) или сохраняем как .psc1 и юзаем.