Управляємо сервером Windows з командного рядка

  1. Зміст статті Windows завжди асоціювалася з графічним інтерфейсом, і довгий час win-адміни вважали...
  2. Управління BYOD за допомогою PowerShell
  3. Мінлива patch
  4. INFO

Зміст статті

Windows завжди асоціювалася з графічним інтерфейсом, і довгий час win-адміни вважали благом відсутність необхідності запам'ятовувати консольні команди. Але зі збільшенням можливостей використання GUI вже не здавалося таким простим. Налаштування доводиться шукати серед численних вкладених діалогових вікон. Спроби все оптимізувати, міняти місцями і додавати нові Візард тільки посилювали плутанину. З'явився Server Core, замість одного сервера доводиться управляти вже десятками, нерідко виконуючи однотипні операції. В результаті адміни повернулися до консолі.

Насправді розвиток консольних утиліт весь цей час теж не стояло на місці. Список команд не сильно змінився: net, netdom, whoami, скрипт активації slmgr.vbs, програма управління службами sc, мережеві утиліти для налаштування і діагностики ipconfig, netsh, netstat / nbtstat, arp / getmac, ping, tracert, nslookup і багато інших. Після анонса PowerShell з'явилася офіційна інформація, що звичні утиліти розвиватися більше не будуть, на зміну їм прийдуть командлети.

Така доля спіткала консольний варіант диспетчера сервера ServerManagerCmd.exe і утиліту установки компонентів OCSetup.exe, які, з'явившись в Win2008, пропали вже в Win2012. Тепер для установки компонентів з консолі використовуються командлети Install-WindowsFeature і Add-WindowsFeature. Консольні утиліти і раніше звичніше, ніж командлети, але результат, отриманий за допомогою PowerShell, дозволяє вибирати більше параметрів, фільтрувати їх, обробляти в скриптах. А головне - тепер потрібні дані можна отримати не тільки з локальної, а й з віддаленої системи, і в зручному вигляді. Все це говорить про те, що потрібно вже бути готовим до змін.

В останніх редакціях ОС ярлик для запуску cmd.exe сховали подалі в меню. Правда, і особливої ​​необхідності в його використанні немає, так як всі традиційні консольні команди можна вводити безпосередньо в консолі PowerShell (хоча є і нюанси), що володіє безперечною перевагою - автодоповнення (по Tab). Поступово на заміну старим добрим утилітам з'являються відповідні командлети, які видають аналогічний результат. Спробуємо розібратися з усіма операціями по порядку, розглянемо типові завдання з використанням консольних команд і PowerShell.

Спробуємо розібратися з усіма операціями по порядку, розглянемо типові завдання з використанням консольних команд і PowerShell

Перевіряємо стан мережевих інтерфейсів за допомогою PowerShell

Відразу після установки операційна система отримує ім'я, сгенерированное випадковим чином. Щоб перейменувати систему і підключити її до домену, використовується утиліта netdom:

> Netdom renamecomputer Win01 / newname: SRV01> netdom join SRV01 /Domain:example.org / OU: ou = ouname, dc = example, dc = org / UserD: DomainAdmin / PasswordD: password

Ті ж операції за допомогою PowerShell виглядають навіть зрозуміліше.

PS> Rename-Computer -NewName SRV01 PS> Add-Computer -domainname example.org -OUPath "OU = ouname = example, DC = org"

Після установки системи або компонента, можливо, буде потрібно настройка режиму запуску сервісу. В консолі для цього є дві команди:

> Sc config winrm start = auto> Net start winrm

А ось командлетів для управління запуском сервісів кілька: Get-Service, Start-Service, Set-Service, Stop-Service, Resume-Service. Їх призначення говорить сама за себе.

PS> Set-Service -name winrm -status Running -StartupType Automatic

Sconfig.cmd

Запам'ятовувати команди адміни Win не дуже полюбляють, в системі можна знайти зручну оболонку для більшості консольних команд Sconfig.cmd. Спочатку вона розроблялася для Server Core, але в Win2012R2 доступна і в режимі повної установки сервера. Sconfig не вимагає знання всіх ключів і дозволяє, переміщаючись по 15 пунктам, швидко зробити основні установки або виконати деякі команди: додати сервер в домен або робочу групу, змінити ім'я комп'ютера, додати локального адміністратора, налаштувати віддалене управління через WinRM і віддалений робочий стіл, налаштувати мережу, Windows Update, час і дату, перезавантажити і вимкнути комп'ютер. Потрібно пам'ятати, що скрипт використовує стандартні консольні утиліти і якщо вони пропадуть в наступному релізі, то, швидше за все, не буде і Sconfig.

Потрібно пам'ятати, що скрипт використовує стандартні консольні утиліти і якщо вони пропадуть в наступному релізі, то, швидше за все, не буде і Sconfig

Sconfig.cmd спрощує роботу ледачим адмінам

А ось з монтуванням мережних дисків не все так просто. Традиційно ця операція виконується за допомогою net use:

> Net use E: \\ SRV01 \ users / Persistent: Yes

Його аналогом вважається командлет New-PSDrive (від PowerShell Drive), але тут є проблема, яка багатьом неочевидна і породжує купу питань.

PS> New-PSDrive -Name E -PSProvider FileSystem -Root \\ SRV01 \ users

За допомогою New-PSDrive створюється так званий диск PowerShell, який доступний тільки в поточному сеансі консолі і тільки в PowerShell. Тобто за допомогою провідника, WMI, засобами .NET Framework, net use підключитися до такого диску можна. Це є очевидним, але в документації це явно прописано. Просто її мало хто читає.

Щоб постійно використовувати диск, необхідно експортувати сеанс, в якому доданий диск, або зберегти команду New-PSDrive в профілі PowerShell, або спочатку використовувати командлет New-Object:

PS> $ net = New-Object -ComObject WScript.Network PS> $ net.MapNetworkDrive ( "E:", "\\ SRV01 \ users")

І тільки в PowerShell 4.0 з'явився параметр -Persist, що дозволяє монтувати PS-диски постійно.

PS> New-PSDrive -Name E -PSProvider FileSystem -Root \\ SRV01 \ users -Persist

Для роботи з дисками і розділами консоль Windows пропонує дві утиліти: diskpart і fsutil. Вони не дуже зручні і інформативні, а тому малопопулярні і їх часто замінюють альтернативними розробками. Отримаємо статистику по розділу.

> Fsutil fsinfo statistics C:

Команда «Get-Command disk» видасть кілька командлетів, але в нашому прикладі вони не дуже допомагають, і, щоб отримати інформацію про вільне місце, як і раніше доводиться звертатися до WMI:

PS> Get-WmiObject Win32_LogicalDisk -ComputerName SRV01 -Filter "DeviceID = 'C:'" | Select-Object Size, FreeSpace

Доступ до файлів в Win традиційно регулюється двома утилітами - takeown і icacls (є ще і cacls, але вона визнана застарілою), цілком справляються зі своїми обов'язками. Наприклад, щоб зробити поточну обліковий запис (повинна входити в групу адміністраторів) власником каталогу, досить ввести:

> Takeown / fc: \ temp ПУЕ

Утиліта icacls дозволяє управляти списками контролю доступу. Для прикладу, збережемо ACL в файл і відновимо його:

> Icacls c: \ temp \ * / save acl.txt / T> icacls c: \ temp \ / restore acl.txt

Та ж операція за допомогою PowerShell виглядає простіше:

PS> Get-Acl c: \ temp | Set-Acl -Path c: \ temp

Управління BYOD за допомогою PowerShell

Одна з найбільших проблем, з якими стикаєшся при роботі з моделлю BYOD, - відсутність управління пристроями користувачів. У Win2012R2 цим заправляє Device Registration Service (DRS), при реєстрації на пристрій встановлюється сертифікат, а в AD створюється новий об'єкт пристрою.

Цей об'єкт встановлює зв'язок між користувачем і пристроєм, створюючи щось на кшталт двофакторної аутентифікації. Користувачі отримують доступ до корпоративних ресурсів, які були недоступні, коли вони працювали за межами доменної мережі. Для роботи буде потрібно роль Active Directory Federation Services (AD FS) і власне служба DRS (встановлюється за допомогою командлета Install-AdfsFarm). Тепер инициализируем службу і приступаємо до реєстрації пристроїв користувачів.

PS> Initialize-ADDeviceRegistration -ServiceAccountName example \ adfsfarm PS> Enable-AdfsDeviceRegistration

В консолі AD FS Management переходимо до Authentication Policies, вибираємо Edit Global Primary Authentication і активуємо Enable Device Authentication. Тепер, використовуючи командлет Get-AdfsDeviceRegistration, можемо переглядати і підтверджувати пристрої ( Детальніше ).

Комплект консольних мережевих утиліт досить добре відомий адміністраторам, адже їх доводиться використовувати досить часто, як при установці, так і для діагностики. Налаштовують мережного інтерфейсу за допомогою netsh interface. Для прикладу переглянемо список і для одного з доступних встановимо IP і DNS-сервер:

> Netsh interface ipv4 show interfaces> netsh interface ipv4 set address name = "1" source = static address = 192.168.1.10 mask = 255.255.255.0 gateway = 192.168.1.1. > Netsh interface ipv4 add dnsserver name = "Local" address = 8.8.8.8 index = 1 > Netsh interface ipv4 show interfaces> netsh interface ipv4 set address name = 1 source = static address = 192 Дивимося мережеві настройки

Для установки і зміни параметрів мережевого інтерфейсу за допомогою PowerShell 3.0 і вище використовуються командлети New-NetIPAddress і Set-NetIPAddress.

PS> Get-NetIPInterface PS> Set-NetIPAddress -InterfaceAlias ​​Ethernet -IPv4Address 192.168.1.10 -PrefixLength 24 -DefaultGateway 192.168.1.1 PS> Set-DNSClientServerAddress -InterfaceAlias ​​Ethernet -ServerAddresses "192.168.1.10", "8.8.8.8"

Причому New-NetIPAddress дозволяє задавати кілька IP для одного інтерфейсу. Замість InterfaceAlias ​​можна використовувати індекс InterfaceIndex, який легко дізнатися у висновку Get-NetIPInterface.

На зміну команді route прийшов набір командлетів, дуже простих і зрозумілих у використанні.

PS> Get-NetRoute PS> New-NetRoute -DestinationPrefix "0.0.0.0/0" -NextHop "10.10.10.1" -InterfaceAlias ​​Ethernet PS> Get-NetRoute PS> New-NetRoute -DestinationPrefix 0 Таблиця маршрутизації, отримана за допомогою route і Get-NetRoute

Аналогом ping служать два командлет Test-Connection і Test-NetConnection (скорочено tnc). Перший дуже простий і нагадує звичайний ping, другий дозволяє перевірити доступність певного порту або системи з різних ПК. Наприклад, подивимося, на яких ПК в групі включений RDP, і перевіримо підключення до example.org з двох систем:

PS> Test-NetConnection -ComputerName example.org -source localhost, SRV02 PS> (Get-ADComputer -LDAPFilter "(name = office *)"). DNSHostName | Test-NetConnection -Port 3389

Але іноді замість однієї команди доведеться запам'ятати кілька командлетів. Так, стан мережних інтерфейсів традиційно можна дізнатися за допомогою ipconfig. До Win2012 / 8, щоб зробити те ж саме за допомогою PowerShell, доводилося звертатися безпосередньо до WMI. Наприклад, нам потрібні МАС і IP-адреси:

PS> Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled = TRUE | Select MACAddress, IPAddress

Мінлива patch

Як команд Win може приймати будь-який файл з розширенням exe, bat, cmd, com, js, msc і vbs, який розташований в поточному каталозі або прописаний в змінної PATH. Переглянути значення PATH дуже просто. Для цього вводимо «echo% PATH%» або використовуємо команду set (set> filename.txt). В консолі PowerShell - «echo $ Env: PATH» або «Get-ChildItem Env:». Щоб змінити, просто дописуємо потрібний каталог:

> Set PATH =% PATH%; C: \ example

або використовуємо GUI (My Computer -> Властивості системи -> Додатково -> Змінні середовища -> Path). Засобами PowerShell змінити значення можна, встановивши SetEnvironmentVariable:

PS> [environment] :: SetEnvironmentVariable ( 'path', "$ env: Path; C: \ example", 'Machine')

І тільки в PowerShell 3.0 з'явився простий аналог ipconfig, точніше, кілька. Наприклад, командлет Get-NetIPAddress видає детальну інформацію про інтерфейси, а Get-NetIPConfiguration (алиас gip) дозволяє отримати інформацію про мережні параметри: IP інтерфейсу, шлюзу і DNS. Додавши додаткові параметри, наприклад -Detailed, отримаємо більше даних.

Профільтрувавши їх висновок, ми можемо замінити «ARP -a» виводить таблицю МАС-адрес і GETMAC - відображає MAC-адреси мережевих адаптерів локального або віддаленого комп'ютера. Є вже і готові скрипти. Наприклад, Ping Multiple Server With Traceroute.ps1 (goo.gl/0iLeyg) дозволяє перевірити підключення до декількох серверів і запустити аналог tracert до неответа системам.

Налаштування брандмауера Windows у режимі підвищеної безпеки WFAS (Windows Firewall with Advanced Security) традиційно проводиться за допомогою netsh advfirewall, що з'явилася в ОС починаючи з Win2k8 / Vista і практично не змінилася з тих пір. Контекст advfirewall дозволяє використовувати сім команд (export, import, dump, reset, set, show і help) і чотири субконтекста (consec, firewall, mainmode і monitor). Переглянути подробиці можна, використавши ключ help або '/?', Та й в Мережі є достатня кількість прикладів. Наприклад, команда set дозволяє настроїти профілі, show - переглянути стан. Дивимося настройки за замовчуванням, активуємо профілі і для Domain дією за замовчуванням встановимо блокування.

> Netsh advfirewall show allprofiles> netsh advfirewall set allprofiles state on> netsh advfirewall set domainprofile firewallpolicy blockinbound

Офіційна інформація свідчить , Що в наступних релізах netsh може пропасти, а використовувати слід командлети PowerShell, що дозволяють до того ж контролювати ще більше функцій. Командлети NetSecurity доступні тільки в PS 3.0, для їх використання в Win2012 / 8 їх необхідно імпортувати Import-Module NetSecurity. За допомогою Get-Command firewall отримаємо список з 27 командлетів (повний список командлетів модуля - goo.gl/Aj9Mg4). Ситуацію спрощує те, що назви командлетів перетинаються з командами netsh.

Ситуацію спрощує те, що назви командлетів перетинаються з командами netsh

Налаштуванням Windows Firewall можна управляти за допомогою майже 30 командлетів

Тепер той же приклад, але засобами PS:

PS> Get-NetFirewallProfile PS> Set-NetFirewallProfile -All -Enabled True PS> Set-NetFirewallProfile -Name Domain -DefaultInboundAction Block

Як бачимо, командлети виглядають навіть простіше. Замість параметра All можна вказати на конкретний профіль: -Profile Domain, Public, Private.

Дивимося профілі Windows Firewall

Доступні і інші функції. Наприклад, можемо виключити Ethernet-інтерфейс з профілю Public.

PS> Set-NetFirewallProfile -name Public -DisabledInterfaceAliases Ethernet

Щоб повернути настройки в початковий стан, досить замість Ethernet встановити NotConfigured. Розширені можливості пошуку командлет Set-NetFirewallProfile дозволяють налаштувати журнал, додати IP, порт, протокол і багато іншого. Всі маніпуляції з правилами виробляються за допомогою семи командлетів: New | Set | Copy | Enable | Disable | Remove | Rename-NetFirewallRule. Щоб переглянути встановлені правила, використовуємо командлет Get-NetFirewallRule, за допомогою фільтрів ми можемо легко відібрати потрібні. Наприклад, що блокують і все, що стосується IE:

PS> Get-NetFirewallRule -Enabled true -Action block PS> Get-NetFirewallRule -DisplayName "* IE *"

Створимо правило, що блокує вихідні з'єднання для IE в двох профілях.

PS> New-NetFirewallRule -Program "C: \ Program Files \ Internet Explorer \ iexplore.exe" -Action Block -Profile Domain, Private -DisplayName "Block IE" -Description "Block IE" -Direction Outbound

Тепер до правилу можемо додати протокол, порт і IP віддаленої та локальної системи.

PS> Set-NetFirewallRule -DisplayName "Block IE" -Protocol TCP -RemotePort 80 -RemoteAddress "10.10.10.1-10.10.10.10" -LocalAddress "192.168.1.10"

При створенні або зміні ми можемо групувати правила, використовуючи параметр -Group, і згодом керувати не одним правилом, а усіма вхідними в групу, за допомогою -DisplayGroup. Щоб відключити правило, скористаємося

PS> Disable-NetFirewallRule -DisplayName "Block IE"

Цілком очевидно, що в майбутньому адміну все більше і більше доведеться виконувати настройки не за допомогою GUI, а використовуючи засоби командного рядка. Це швидше, дозволяє автоматизувати практично всі завдання і легко справлятися з великою кількістю серверів.

INFO

Список параметрів командлет можна дізнатися за допомогою Show-Command, наприклад Show-Command Get-NetFirewallRule.

Переглянути подробиці можна, використавши ключ help або '/?