Управляем сервером Windows с командной строки. Ч.1 Основные операции

ОС 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.
После установки ОС, она получает имя сгенерированное случайным образом. Чтобы переименовать ее, подключить к домену используется утилита 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

А вот с монтированием сетевых дисков не все так просто. Традиционно эта операция выполняется при помощи «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 /f c:\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
Теги:

Понравилась статья? Оставьте комментарий или подпишитесь на RSS рассылку.

Комментарии

Комментариев пока что нет

Оставить комментарий

(required)

(required)