Windows Server 2012 — жизнь без GUI

Windows Server 2012 позиционируется как система, которой GUI для полноценной работы не нужен. При установке по умолчанию выбран пункт Server Core, добавлена возможность удаления графического интерфейса без переустановки сервера, список ролей, не нуждающихся в GUI в сравнении с 2008 R2 расширен. В своих книгах Microsoft утверждает, что работа с командной строкой естественна и вспоминает начало 90-х годов прошлого века, когда системные администраторы жаловались на бесполезную трату ресурсов графической оболочкой. В дополнение к этому Microsoft предлагает «новый» путь администрирования своих серверных операционных систем, в котором предполагается, что серверную консоль вы будете видеть только один раз – при установке операционной системы, а вся работа и настройка системы будет осуществляться удаленно: через «Диспетчер серверов», MMC-оснастки и PowerShell, который в 2012 сервере уже версии 3.0

Допустим, что первоначальная настройка сервера после установки включает в себя:

  • Настройку сетевых интерфейсов
  • Установку часового пояса
  • Включение удаленного рабочего стола
  • Переименование компьютера
  • Присоединение к домену

Вопрос в следующем: а можно ли эти задачи выполнить удаленно средствами PowerShell? Ну вот, допустим, есть удаленный сервер где-нибудь в тайге, на который местный умелец поставил 2012 сервер, пошел отметить это дело и потерял ключ от шкафа. Шкаф бронебойный, водо-, звуконепроницаемый и вообще предполагает защиту от несанкционированного доступа медведей. А настроить надо. Допустим, есть VPN или какой-нибудь «прямой провод» (очень часто вижу эту услугу в прайсах провайдеров) и сервер доступен по сети. И только по сети.

В исходных данных письмо от местного умельца:

Привет, поставил венду на сервер. IP – 169.254.23.43. Логин – Администратор. Пароль – qwe123!@#. Пока.

Готовимся


Удаленный сервер в рабочей группе, в свежеустановленном состоянии, RPC не понимает (порты на брандмауэре закрыты), не пингуется, с непроизносимым именем и московским часовым поясом в Сибири. Если бы это был 2008 R2 на этом бы наши приключения и закончились, так как все средства удаленного управления в нем по умолчанию отключены. В 2012 есть способ удаленно управлять из коробки – включенный по умолчанию WinRM, реализация стандарта WS-MAN от Microsoft. С одной стороны вроде дыра в безопасности, с другой – в нормально спроектированной сети, в которой сервера находятся в отдельном VLAN, доступ к которому ограничен для доверенных пользователей, вероятность использования этой дыры незначительна. Но все-таки есть.

Для управления удаленным сервером в рабочей группе с помощью WinRM, мы должны доверять удаленному серверу. Тут мне логика немного непонятна. По идее, удаленный сервер должен доверять нам, мы же им управляем, а не он нами. Возможно, это от неполного понимания принципов работы WS-MAN. Но в любом случае, сказать WinRM, что мы доверяем удаленному серверу нужно. Это реализовано занесением имени или IP-адреса удаленного сервера в список «доверенных хостов» (TrustedHosts)

si WSMan:\localhost\Client\TrustedHosts 169.254.23.43

Теперь как-то нужно выполнить первоначальную настройку удаленного сервера. Я знаю 2 командлета, которые могут помочь с этой задачей: Enter-Pssession и Invoke-Command. Оба используют WinRM. Enter-Pssession дает нам консоль удаленного сервера, Invoke-Command отправляет блок команд на удаленный сервер и возвращает результат их выполнения. Ниже используется Invoke-Command (мы же собрались вообще не видеть удаленную консоль).

Действия будем выполнять по следующему принципу:

  1. PowerShell
  2. Если не получается выполнить задачу через PowerShell, подключаем cmd
  3. Если не в PowerShell, не в cmd нет подходящих инструментов – WMI через PowerShell
  4. Ну и как последний вариант – ковыряние реестра также через PowerShell

Настройка сетевых интерфейсов


Делать нечего, меняем свой адрес на что-нибудь из APIPA-диапазона, ну например 169.254.0.1 и садимся думать, как удаленно изменить IP-адрес у таёжного сервера. Думать тут нечего:

  1. Определить на каком адаптере производить изменения
  2. Отключить DHCP
  3. Назначить статический адрес для сервера с маской подсети и шлюзом по умолчанию.
  4. Hазначить DNS-серверы

И все это желательно не отцепляясь от сервера.

В PowerShell 3.0 появилась целая группа Network Adapter Cmdlets, которая позволяет нам делать с сетевыми адаптерами все что угодно.

Получаем объект сетевого адаптера и сохраняем его в переменной $adapter. Ethernet – это новое имя для «Подключение по локальной сети». Это изменение, несмотря на кажущуюся незначительность, очень радует.

$adapter = Get-NetAdapter Ethernet

Отключаем DHCP

$adapter | Set-NetAdapter –Dhcp disabled

Меняем IP-адрес на нормальный с необходимой маской и шлюзом. Для этого существует другая группа Net TCP/IP Cmdlets

$adapter | New-NetIPAddress 192.168.0.5 –PrefixLength 24 –DefaultGateway 192.168.0.1

Добавляем DNS-серверы. Третья группа DNS Client Cmdlets

Set-DnsClientServerAddress Ethernet –addresses (“192.168.0.2”,”192.168.0.3”)

Как все это выполнить на удаленном сервере? Сделать скрипт и с помощью Invoke-Command запустить его на выполнение.

Сохраним этот набор команд где-нибудь с именем скрипта, например, remotechangeip.

Тут есть один момент. Называется политика выполнения скриптов.
По умолчанию в PowerShell разрешается работа только в интерактивном режиме, выполнение любых скриптов запрещено (restricted). Для выполнения скриптов нам нужно либо remotesigned (цифровая подпись требуется для скриптов, загруженных из интернета), либо unrestricted (при выполнении неподписанного скрипта, загруженного из интернета будет выдаваться предупреждение о ненадежности источника). Если на безопасность совсем положить, можно поставить bypass (будет выполняться все без лишних вопросов). Eсли у вас есть собственный сертификат, выданный доверенным издателем, и вы не ленитесь подписывать с его помощью свои скрипты – вам нужен allsigned (в таком случае, вы наверное и сами это знаете). У меня сертификата нет, поэтому политику я устанавливаю remotesigned.

Set-ExecutionPolicy remotesigned

Политика выполнения скриптов устанавливается на локальном компьютере, на удаленном такой необходимости нет, потому что Invoke-Command перед выполнением скрипта на удаленном компьютере преобразовывает файл скрипта в просто набор команд. Соответственно, на удаленном компьютере выполняется не скрипт (файл с расширением .ps1), а набор команд, которым политика выполнения скриптов по барабану.

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

Invoke-Command 169.254.23.43 C:\scripts\remotechangeip.ps1 –Credential Администратор

Пароль от учетной записи Администратор у нас есть в письме. После выполнения получаем сервер со статическим адресом 192.168.0.5 с маской подсети /24, шлюзом по умолчанию 192.168.0.1 и DNS-серверами 192.168.0.2 и 192.168.0.3

Еще нужно не забыть изменить IP в TrustedHosts, иначе на этом наше удаленное администрирование закончится.

$newvalue = ((ls WSMan:\localhost\Client\TrustedHosts).value).replace("169.254.23.43","192.168.0.5")
si WSMan:\localhost\Client\TrustedHosts $newvalue

Изменение часового пояса


Я очень долго пытался решить эту задачу с помощью PowerShell. Я нашел функцию, меняющую часовой пояс локально. Но если мы попытаемся выполнить эту функцию через Invoke-Command, получим граблями по лбу в виде «Имя Set-Timezone не распознано как имя командлета, функции, файла сценария или выполняемой программы».

Invoke-Command при выполнении естественно не копирует с локальной машины, а выполняет имеющиеся на удаленном сервере командлеты. Это понятно и логично. Задача была ясна — перед выполнением Invoke-Command нужно сбросить функцию на удаленный сервер. Но… тут мне стало лень.

Если заглянуть в код функции, то становится понятно, что она всего лишь проверяет версию ОС и в зависимости от нее выполняет либо timedate.cpl (XP и ниже), либо tzutil (Vista и выше). Проверять версию ОС незачем, мы ее знаем. Поэтому просто изменим часовой пояс с помощью tzutil

Invoke-Command 192.168.0.5 {tzutil /s “North Asia Standard Time”} –Credential Администратор

WMI
Можно попробовать установить часовой пояс, используя WMI. Выглядеть это будет так:

$strComputer = "."
$objWMI = gwmi win32_computersystem" -computername $strComputer
$objWMI.CurrentTimeZone = 207
$objWMI.Put()

Что здесь происходит? Точка (.) говорит, что мы работаем с локальным компьютером. Обращаемся на локальном компьютере к классу win32_computersystem. Присваиваем свойству CurrentTimeZone значение 207, соответствующее “North Asia Standard Time”. И методом Put сохраняем изменение часового пояса.

Также сохранить и передать скрипт на удаленный компьютер с помощью Invoke-Command. По-моему, использовать tzutil проще.

Значения часовых поясов можно взять отсюда или из вывода tzutil /l
Ну и без PowerShell все-таки не обошлось.

Включение удаленного рабочего стола


В PowerShell 3.0 появилось множество командлетов, для работы с RDS. Их группа так и называется Remote Desktop Cmdlets. Но, как я понял, они рассчитаны на работу с RDS-сервером, просто включить удаленный рабочий стол для администратора с их помощью нельзя.

Остается два способа включения рабочего стола. Через WMI-вызовы и неправильный через модификацию реестра. Модификация реестра мне никогда не нравилась. Одно неловкое движение пальца и никто не гарантирует, что сервер поднимется после перезагрузки.

Что касается включения удаленного рабочего стола, то модификация ключа HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\fDenyTSConnections, которому нужно присвоить значение 0, чтобы разрешить удаленный рабочий стол: во-первых, требует перезагрузки, во-вторых, не добавляет исключение для удаленного рабочего стола в правила брандмауэра.

Поэтому я буду использовать WMI-класс win32_terminalservicesetting и его метод setallowtsconnections, что позволит обойтись без перезагрузки и добавить правила исключения в брандмауэре одной командой.

Invoke-Command 192.168.0.5 {(gwmi win32_terminalservicesetting -namespace root\cimv2\terminalservices).setallowtsconnections(1,1)} –Credential Администратор

Теперь у нас есть доступ к таёжному серверу по RDP! Можно радоваться? Представим, что единственный канал связи с внешним миром у удаленного сервера через спутник с грабительскими тарифами, диалапной скоростью, зашкаливающим пингом и продолжим настраивать сервер удаленно через PowerShell.

Переименование сервера и присоединение его к домену


Тем более, что осталось совсем немного.

По идее, командлет Add-Computer позволяет переименовать компьютер при присоединении его к домену. Но на практике, я сталкивался с тем, что при присоединении к домену и одновременным переименованием с помощью этой команды, компьютер входит в домен под своим старым именем. И понеслась – вывести компьютер из домена, перезагрузиться, удалить учетку в AD, запустить репликацию если контроллеров несколько, подождать, переименовать компьютер, перезагрузиться, ввести в домен, перезагрузиться.

Поэтому я предпочитаю операции переименования компьютера и ввода в домен выполнять отдельно.

Переименование

Invoke-Command 192.168.0.5 {rename-computer taiga -restart} -credential Администратор

Как только нам вернули управление, значит удаленный сервер перезагружается. Проверить результат команды (и готовность сервера) можно так:

Invoke-Command 192.168.0.5 {$env:computername} -credential Администратор

И наконец-то ввод в домен

Invoke-Сommand 192.168.0.5 {add-computer contoso.com -credential contoso.com\domainadmin -restart} -credential Администратор

Заканчиваем


Все поставленные в начале задачи выполнены. Теперь уже можно думать, как дальше жить и где искать этот чертов ключ от шкафа.

И напоследок небольшая шпаргалка по CMD и PowerShell.
CMD PowerShell
Изменить сетевые настройки
netsh interface ip set address name = “Ethernet” static 192.168.0.5 255.255.255.0 192.168.0.1 1
netsh interface ip set dns name = “Ethernet” static 192.168.0.2
netsh interface ip add dns name = “Ethernet” static 192.168.0.3
$adapter = Get-NetAdapter Ethernet
$adapter | Set-NetAdapter –Dhcp disabled
$adapter | New-NetIPAddress 192.168.0.5 –PrefixLength 24 –DefaultGateway 192.168.0.1
Set-DnsClientServerAddress Ethernet –addresses (“192.168.0.2”,”192.168.0.3”)
Изменить часовой пояс
tzutil /s “North Asia Standard Time”
$strComputer = "."
$objWMI = gwmi win32_computersystem" -computername $strComputer
$objWMI.CurrentTimeZone = 207
$objWMI.Put()
Включить удаленный рабочий стол
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0
netsh advfirewall firewall set rule group="remote desktop" new enable=Yes
(gwmi win32_terminalservicesetting -namespace root\cimv2\terminalservices).setallowtsconnections(1,1)
Переименовать сервер
netdom renamecomputer %computername% /newname:taiga /reboot
rename-computer taiga –restart
Присоединить к домену
netdom join taiga /d:contoso.com /ud:contoso.com\domainadmin /pd:* /reboot
add-computer contoso.com -credential contoso.com\domainadmin -restart

Объединяет их одно: им всем для удаленной работы нужен RPC, по умолчанию закрытый брандмауэром. Поэтому единственным способом доставить их на удаленный компьютер, является WinRM.

А Enter-Pssession у меня не заработал :)

Использован материал из:
MSDN
Technet
AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 102

    +49
    Сейчас меня закидают помидорами, но…

    На какие только извращения не идут люди, чтобы не использовать *nix.
    • UFO just landed and posted this here
        +5
        Ну не знаю, fun по-моему движет вообще всем прогрессом в любой области. А в темной консольке администрировать Windows намного проще, чем кажется.
          +24
          А вы сравните:
          $strComputer = "." $objWMI = gwmi win32_computersystem" -computername $strComputer $objWMI.CurrentTimeZone = 207 $objWMI.Put()
          и
          ln -sf /usr/share/zoneinfo/Asia/Novosibirsk /etc/localtime
          

          И скажите, как долго надо курить маны, чтобы дойти до такого решения.
            0
            Немного практики в vbscript и поиск по MSDN сильно сокращают время курения манов.
            Ведь если не знать bash и общие принципы nix-систем до вашего решения тоже путь не самый короткий.
              +5
              # cat /etc/timezone
              Europe/Minsk

              Насколько я помню этого достаточно в gentoo, но я могу и ошибаться — это делается редко, по мануалу и настолько логично что совершенно не запоминается :)
                +2
                Если не знать bash, то google «change localtime linux» — любая из первых двух ссылок приведет к искомой строке и объяснит общие принципы nix-систем.
                Поиск и выбор нужного пояса происходит в контексте вводимой команды с помощью Tab.
                В tzutil, напротив, если не знаешь, что вводить, нужно сначала вывести список всех возможных вариантов. Про powershell промолчу…
                  –5
                  Использование Server Core подразумевает автоматизирование развёртывание и управление через System Center. PowerShell тут выступает в роли API.
                    +2
                    Даже при установке вручную, начальную настройку обычно производят в sconfig, позволяющем обойтись без «черной магии», описанной в посте.
                +4
                И скажите, как долго надо курить маны, чтобы дойти до такого решения.

                Яростно плюсую. Я тоже попробовал настроить сервер без графической оболочки как раз ради фана.
                Были задачи:
                1. Настройка сетевого интерфейса(добавление статического ип).
                2. Добавление ролей.
                3. Включение DHCP.
                4. Добавление виртуальной машины. Настройка потребляемых ей ресурсов и поднятие еще одной копии server2012.
                5. Добавление и настройка rds + remoteapp.
                Если первые три шага я сделал с горем пополам, то дальше уже не осилил. Раздражает, что не понимаешь какой смдлет надо использовать. А что бы просмотреть весь список нужно очень внимательно изучить три или пять экранов моего монитора(который не 19дюймов) И если кто то покажет ресурс. Где показан весь список мидлеттов, разбитый на группы и подгруппы, с подробным писанием цены ему не будет, а если на русском(не обязательно) то это будет вообще прекрасно. Я такой найти не смог.
                    0
                    Спасибо! :)
                    +1
                    ставьте PS3, запускайте ISE справа будет шикарная подсказка по коммандлетам — в PS ISE3 писать скрипты одно удовольствие.
            +25
            Всё это невероятный обман. Настолько наглый, что непонятно, на кого расчитан, и кто на это поведётся. Речь идёт, внимание, об удалении графического интерфейса, причина: администраторы жаловались на бесполезную трату ресурсов графической оболочкой.

            Но на скриншотах Server Core ясно видно окно, которое содержит заголовок с кнопками и полосу прокрутки, может менять размер и положение на экране. Вот, например:



            Отрисовка окон, кнопок, полос прокрутки, перемещение окон и изменение их размеров — это работа графической оболочки. Здесь, как видите, графическая оболочка никуда не исчезла, как работала, так и работает, как тратила ресурсы, так и тратит. О каком же «особом режиме» идёт речь? В обычной Windows, даже не серверной, можно в реестре прописать так, чтобы вместо explorer.exe запускался при старте системы cmd.exe. И получается режим, точно такой же, как здесь. Только без громкого названия.

            Утверждение, что Server Core лишён GUI является ложью. Любая Windows одной правкой в реестре превращается в «Core».
              –3
              Допустим, не одной.

              Чего нет в Server Core:
              1. Explorer-а
              2. MMC
              3. Панели управления и всех относящихся к ней .cpl файлов (кроме Языка и региональных стандартов и Даты и времени)
              4. Internet Explorer-а и HTML-файлов справки
              5. Почтового клиента
              6. Медиаплеера (надо же :))
              7. Остальных стандартных программ: Paint, калькулятор и прочие

              Получаем меньше обновлений, меньше перезагрузок и увеличившуюся надежность.
              И это все в 2008 сервере. technet.microsoft.com/en-us/library/dd184075.aspx
              Насчет 2012 навскидку не нашел.
                +11
                Вся эта хрень не запускается, если поставить шеллом cmd.exe и не запускать специально ничего из вышеперечисленного. Точно так же «не тратит ресурсы». Разве что дисковое пространство. В нём сейчас, в 2013 году, нехватки обычно нет. На медиаплеер точно хватит.
                Отсутствующий софт не обновляется? Ну, согласен, действительно. Но речь-то идёт не про экономию обновлений, а про отключенный GUI, жрущий ресурсы, который на самом деле не отключен.
                  –3
                  Знаете, я завтра проверю, что запускается если в обычной установке поставить шеллом cmd и либо соглашусь с вами, либо нет. А пока все это ваши слова против моих слов, подкрепленных ссылкой.
                    +4
                    То что отключение графической оболочки под Windows это обман, с этим я согласен. То что в 2013 году ГУЙ это жуткая трата ресурсов и поэтому его нужно отключать — это какая-то экономия на спичках. На современном серверном железе отрисовка оболочки это же просто капля в море.
                      +2
                      А если сервер вообще не трогать, то таких впечатляющих результатов добьемся, дух захватывает.
                      Я проверил вашу теорию о cmd в качестве шелла по умолчанию. На сервере ничего не было установлено.
                      Оперативная память — 300 МБ с Explorer, 250 с cmd, 200 c Core
                      Дисковое пространство — 10 ГБ с Explorer и cmd, 7 с Core

                      Возьмем гипервизор, в который влезает, ну пускай 10 виртуалок с полным интерфейсом. Выбрав Core — получаем освободившийся гигабайт памяти и 30 ГБ пространства, которые можно пустить на что-нибудь полезное.
                        0
                        Значит в Core ещё отключаются какие-нибудь сервисы, которые не имеют смысла без explorer.exe, вот и выходит меньше оперативки. То есть Core это такой минималистичный набор настроек для сервера. А не «отключение GUI», как заявлено. Про дисковое пространство я выше писал, на современных объёмах дискового пространства почти не заметно.
                          0
                          Понятно, что это не MinWin, так как нельзя терять совместимость с приложениями.
                          Но удалением Explorer дело не ограничилось, в Server Core даже интерфейс выглядит по другому — многие элементы не отображаются.
                      +1
                      Есть блокнот, позволяющий копировать файлы, запускать программы\ заходить на шары ну и и открывать текстовый файлы :)
                      +1
                      Сам микрософт описывает core вот так

                      Server Core for Windows Server 2012 is a minimal server configuration option for computers running on the Windows Server 2012 operating system. Server Core provides a low-maintenance environment capable of providing core server roles.

                      The following table lists the benefits of Server Core for Windows Server 2012.Benefit Description

                      Reduced servicing
                      Because Server Core for Windows Server 2012 installs only what is required for a manageable server, less servicing is required.

                      Reduced management
                      Because less is installed on a Server Core-based server, less management is required.

                      Reduced attack surface
                      Because there is less running on the server, there is less attack surface.

                      Less disk space required
                      Server Core requires about 4GB to install.

                      Less memory (RAM) required
                      Because fewer services are running on a Server Core-based server, memory that would otherwise be needed by Windows is available to Server applications.
                      +8
                      Дякую тобi Боже, що я не вiндовоз
                        +6
                        Извиняюсь за оффтоп, вопрос по PS. Зачем его сделали таким монструозным? Смена часового пояса в примере выглядит просто устрашающе. Или сетевые настройки — в netsh все еще более-менее просто ip, маска, шлюз, а в шелле обязательно так все обстоятельно прописывать или есть какие-нибудь сокращения? Ну почему -DefaultGateway, почему не -gateway или -gw?
                          0
                          Почему такой монструозный — это не ко мне, сам мучаюсь. Писать все это обязательно. У меня в примерах везде где можно использованы алиасы и шорткаты, оставлено только то, без чего не заработает.
                            0
                            Например -computername необязательный в gwmi — он по умолчанию точка. Можно как то так:

                            gwmi win32_computersystem | %{ $_.CurrentTimeZone = 241; $_.Put()}

                            Кстати, а swmi нельзя прикрутить?

                            типа swmi win32_computersystem @{CurrentTimeZone = 241}
                            +10
                            Лишь бы не как в Unix.
                              0
                              >> Ну почему -DefaultGateway, почему не -gateway или -gw

                              В PowerShell можно писать начало опции достаточное для отличия от других в данном случае наверное, будет достаточно -d
                                0
                                >>>Смена часового пояса в примере выглядит просто устрашающе

                                Автор поста посчитал, что использовать интеграцию с WMI более павершельно, чем использовать интеграцию с консольными программами. POwershell ничего не знает про смену часового пояса. Он знает про wmi, дотнет и консольные программы :)
                                  0
                                  Если вы не заметили, WMI-изменение часового пояса под спойлером. А в решении указан консольный tzutil
                                    0
                                    Я заметил, что в табличке WMI решение, указано в колонке PowerShell а tzutil в cmd
                                +7
                                М-да… Круто… Сразу понимаешь, что такое интуитивно понятный интерфейс.

                                Одного не пойму: Что мешает Microsoft'у сделать из Windows систему пригодную для удаленного администрирования? Вставить вменяемый шелл и к каждой подсистеме сделать нормальную утилиту управления из командной строки. Так, как это делается в нормальных системах…
                                  +5
                                  Они столько лет шли к понимаю просто факта, что из командной строки можно эффективно и быстро управлять сервером, а тыкать миллион галочек это ой как неудобно. Так что подождем еще лет пяток, пока не сообразят наделать утилиток. Конечно же, это будет «новшество» с соответствующим прайсом.
                                  Я люблю и ценю командную строку, но PS так и не смог осилить :-(
                                    0
                                    В командной строке и до PowerShell можно было управлять сервером с помощью CMD и батников. В CMD и сейчас утилит хватает. Кому хотелось максимальной автоматизации и управления множеством серверов с помощью скриптов брали на вооружение vbscript, ну а сейчас PowerShell.
                                      0
                                      Кстати, а есть где обычному админу «из тайги», так сказать, можно прочитать более-менее доступную документацию по всем этим WinRM-WMI?
                                      (отредактировано) Пардон, тут уже был такой вопрос…
                                  0
                                  >>>Вставить вменяемый шелл и к каждой подсистеме сделать нормальную утилиту управления из командной строки

                                  Примерно так это и делается, причем не только для подсистем, но и для прикладных программ типа Exchange и SQL Server просто не все коммандлеты еще написаны. Если не хватает искоробочного, можно вставить в свой профиль чот-нибудь из poshcode.org
                                  +8
                                  Ящетаю — автору — респект.
                                  Человек четко, внятно, однозначно показал, _как_ рулить Windows из консоли (например — с мобильника на пляже в Египте).
                                  Пост проплачен RMS'ом, однозначно.
                                    +7
                                    О!
                                    Я буду первый (tm) о ёжике и кактусе!
                                      +10
                                      Автору- браво за настойчивость!

                                      Но после привычных *nix систем все выглядит просто ужасно. Так и хочется спросить у разработчиков — вы что, чудаки эдакие, курите!? :)
                                        0
                                        Я прочитал все комментарии, статью не читал, автор держит удар!
                                        Присоединись к мнению большинства, не понятно зачем это нужно, если есть nix, а если не хочется nix, то можно мышкой в панели управления виндовз потыкать, а не писать гигантские непонятные (для меня) выражения в командной строке.
                                          0
                                          нужно это, например, для управления кластером серверов, на которых уже крутятся виртуальные сервера приложений…
                                          Пока писал, задумался. Действительно, какая на хрен разница. Если я выношу весь инфраструктурный и прочий бизнес-софт в «облако», и на реальном железе ОС обслуживает только систему виртуализации и связь с другими нодами кластера, тут удерживать может только большая любовь (или привычка) к Hyper-V.
                                            0
                                            Экономия на железе: habrahabr.ru/post/183012/#comment_6357334
                                            Windows Core — слабая попытка удержать потребителя, который подумывает или уже начал сваливать на *nix из экономических соображений.
                                          +9
                                          Напомнило: "… и Windows легко превращаются… превращаются Windows… Windows превращаются… в элегантные *nix! Простите, маленькая техническая неувязка" (с)
                                            +1
                                            Непонятно, зачем убирать GUI. На современных серверах ресурсы на отрисовку тратятся совсем мизерные. Компьютеры становятся быстрее, а MS убирает то, что работало без тормозов даже на P4. Ну разве что если по сети ходить через RDP, то GUI требует больше сетевого трафика. Ну так никто не мешает реализовать все улучшения командной строки без удаления GUI… Кому надо, тот воспользуется. А теперь опять переучиваться. С таким подходом, действительно, проще раз напрячься и перейти на *nix
                                              +4
                                              У школьников на $5-ых впсках TDS-ка тормозит:)

                                              Так ведь и гуй, на самом деле, никто не убирает. Гляньте скриншот выше. А сравнивая лаконичность и универсальность команд какого-нибудь bash и PS, PS явно не выигрывает
                                                0
                                                Насчет лаконичности может быть (правда автор использовал не все возможности лаконичности). А универсальность у PowerShell может быть и выше — так как шелл объектный, то количество контекстов, в которых можно применять команду больше — команды передают друг другу полную информацию о структуре объектов и можно их использовать напрямую не парся строчки
                                                  +1
                                                  PS офигенно выигрывает тем, что это такой же .Net язык, как и все остальные, в общем-то.
                                                  хотите через гуи в скрипте psh вопрос юзеру задать — не вопрос.
                                                  конвейерные операции выполняются с обьектами и свойствами.
                                                  Например, сделайте
                                                  ps-cmd>Get-ChildItem * | select *
                                                  все, что Вы увидите — будет длинный список _свойств_ объектов.
                                                  0
                                                  Непонятно, почему автор на заглянул на официальную страничку, чтобы посмотреть, что такое сервер кор и зачем его сделали.
                                                    +1
                                                    По-моему, вы не читали ни пост, ни комментарии.
                                                  0
                                                  Вы все шутите про nix, а они возьмут да и встроют в следующей версии Windows свою сборку GNU утилит с zsh по умолчанию.
                                                    +2
                                                    Религия не позволит.

                                                    Да и там пол системы с нуля надо переделать, чтобы *nix-овые утлиты работали так, как задумано, а не как-то через жопу по особенному.
                                                      0
                                                      Да, но никто не мешает в качестве базового взять код MinGW и Cygwin.
                                                        +3
                                                        Вы еще предложите ядро Windows основать на базе kernel.
                                                        Никто же не мешает?
                                                          +1
                                                          Не согласен с аналогией. MinGW и Cygwin уже готовы к использованию.
                                                            +2
                                                            Как бы сказать…
                                                            Мимикрия — это не enteprise solution.
                                                            Где-то как-то так.
                                                              +1
                                                              Не стоит так серьезно обсуждать шутку, улыбнитесь.
                                                                +3
                                                                улыбнулся
                                                      0
                                                      а через лет пяць — grep…
                                                      Это шутки сквозь кровавые слезы, ога.
                                                      0
                                                      Помнится, в ранних NT была posix-подсистема…
                                                        +1
                                                        Почему была? Она там до сих пор есть, в виде Services for Unix Applications. В девятке обещают выпилить.
                                                          0
                                                          Ее и в восьмерке с семеркой хотели выпилить.
                                                            –1
                                                            Её по-моему в этих системах отдельно ставить надо, в дистрибутиве её уже нет.
                                                      +3
                                                      Смех сквозь слезы

                                                      Вообще хорошо что теперь хоть так можно управлять. Пусть такой, какой есть, но инструмент теперь существует.
                                                        +1
                                                        вообще-то управлять и раньше можно было, только приходилось проявлять смекалку и unattented режим установки. Хотя без последнего и сегодня не обойтись толком…
                                                        +4
                                                        >Тут мне логика немного непонятна. По идее, удаленный сервер должен доверять нам, мы же им управляем, а не он нами.

                                                        В *никсах тоже когда первый раз идешь на сервер по ssh спрашивает, доверяешь серверу или нет, и открытый ключ его показывает. Когда соглашаешься то пара ключ+адресс сервера запоминается, и если что-то из этого позже изменится, то на сервер не пустит пока не удалишь из known_hosts соответствующую запись. Если вместо настоящего сервера каким-то образом по указанному адресу будет доступен левый — могут увести пароли или еще чего пострашней.
                                                          0
                                                          Пробовал, запорашивает заново пару. Не уведут.
                                                            0
                                                            Для ssh сначала нужно сгенерировать пару закрытый-открытый ключ. Добавить открытый в authorized_keys на сервере, говоря серверу, шифровать этим ключом исходящие сообщения, которые мы с помощью нашего закрытого ключа будем расшифровывать, доказывая, что мы это мы. А тут — TrustedHosts, в который мы сами и пишем, что хотим управлять сервером с вон тем IP. На удаленном сервере вообще никаких телодвижений совершать не надо.
                                                              0
                                                              То есть злоумышленник берет, и правит TrustedHosts у себя на ПК? Оригинально.
                                                          –5
                                                          1. Речь идет об удаленной машине. На ЛОКАЛЬНОЙ можно установить часовой пояс командой set-timezone. Об этом писал автор. Никсоиды видимо табом не нашли. А в никсе сможете без Ссш это сделать?
                                                          2. Ps принимает большинство команд никса как синонимы, активировать надо. Да и штатные команды намного проще и короче никсовых. Не надо помнить пути ко всяким /etc/init.d/
                                                          3. Я не особо шарю, но холиварщики могут описать как про делать аналогичные настройки на никс при тех же условиях? Напомню: система из коробки, при установке кроме пароля рута ничего не в водилось, сеть не настроена, dhcp в сети нет, Ссш не включен, порты не открыты, Физического доступа нет
                                                          Что? Всё? 2 условия не совпади и командировка в тайгу?
                                                            +1
                                                            Забыли добавить
                                                            «И операционная система сама поставилась.»
                                                            то есть если ее кто то поставил, то этот кто по вашей подсказке сможет ввести несколько команд в консоли.
                                                            сеть не настроена

                                                            если сеть не настроена, на любой ОС коммандировка в тайгу.
                                                            исходные условия автора:
                                                            Допустим, есть VPN или какой-нибудь «прямой провод» (очень часто вижу эту услугу в прайсах провайдеров) и сервер доступен по сети. И только по сети.

                                                            то есть VPN мы можем допустить, которого точно нету в Ос из коробки а ssh нет?
                                                              +2
                                                              А в никсе сможете без Ссш это сделать?

                                                              Как бы ему вообще разницы нету, ssh это или терминал локального компьютера. Ну или я не заметил.
                                                                +1
                                                                В тайгу вместе с сервером отправляется уже настроенный маршрутизатор, в который нужно просто воткнуть сетевой кабель от провайдера, чтобы получить site-2-site VPN. :)
                                                                0
                                                                1. Я что-то не могу представить себе ситуации когда мне понадобилось бы установить таймзону на сервере, не имея доступа к серверу. Ну вообще в теории это можно сделать по SNMP.
                                                                2. Да, надо просто помнить громоздкие команды на 2-3 строки и пути в реестре.
                                                                3. В том случае если сеть не настроена вообще (на интерфейсе нет никакого айпишника) — борода.
                                                                SSH во всех дистрибутивах включен по умолчанию и порты к нему открыты также по умолчанию.
                                                                Т.е. если хоть какой-то айпи на интерфейсе все же висит, то доступ к серверу получить можно.
                                                                Чего вы ждете? Аналоги команд вам привести?
                                                                  0
                                                                  1. Главное сеть настроить на сервере, к которому нет доступа и система поставилась сама.
                                                                  2. Ещё раз. На машине, что уже в домене или локальная — всё на много проще и короче. Для удаленной левой — оно вообще не особо предназначено видимо. Вот и шаманим. После ввода в домен становится всё просто.
                                                                  3. Это и была изначально задача. Есть провод и ип встал по умолчанию из диапазона APIPA.

                                                                  На самом деле было не раз так, что в другой стране надо было срочно восстановить с бекапа машину. Бекап есть в сети и снят штатными средствами винды. Машина не в домене.
                                                                  Т.е. Проходило это так: охранник вставляю диск и следовал интрукциям до момента настройки сети и включения рдп. Дальше разворачивается образ уже. Заняло это примерно 3 часа. Охранник сложней калькулятора видимо ничего не видел.
                                                                  Была бы статья эта раньше — я бы всё на много быстрее поднял.
                                                                    +1
                                                                    В случае с виндой в 90% случаев еще и нужно чтобы кто-то поставил дрова на сетевой контроллер. Вы имеете в виду, что некий чувак может поставить ОС с драйверами, но не может вбить айпишник в настройки сетевого соединения? Ситуация из разряда невероятного.

                                                                    По второму пункту — намного проще и короче? Да вы взгляните даже на тот же netsh, он же ужасно громоздкий.
                                                                    Когда можно будет писать хотя бы что-то в духе
                                                                    netsh ip set “Ethernet” 192.168.0.5/24
                                                                    тогда и поговорим об удобстве администрирования винды из консоли.
                                                                      –2
                                                                      В случае с видной — разве бывают драйвера сетевой????

                                                                      Раньше для какой-то периферии помнится были драйвера. На сегодня про это с видной можно забыть. Разве что старые raid ещё используется.
                                                                        +1
                                                                        При чем тут рейд? Ну ок, давайте про рейд — в винде нет драйверов ни под один современный хардварный рейд-контроллер, приходится подпихивать на флешке во время установки.
                                                                        С сетевухами все несколько лучше, но, как показывает практика, на серверах 2008+ года всегда приходится ставить дрова.

                                                                        Мы же не про ZverCD говорим, да?
                                                                          0
                                                                          У HP есть SmartStart CD (в G8 заменили на флешку), который автоматизирует подкладывание драйверов. У IBM есть аналогичная система, с другими вендорами не работал, но уверен, что и они не отстают.
                                                                            0
                                                                            И даже у dell есть.
                                                                            Разве я где-то писал что драйверов для чего-то на винду не существует? Суть в том, что их надо ставить — в автоматическом или полуавтоматическом режиме, не суть важно.
                                                                            –3
                                                                            Мы же не про ХР-2003 говорим?
                                                                            Вы видели под 2012 драйвера на современном рейд?
                                                                            2013 года IBM лезвия HV22 не имеются жесткие диски в принципе, подключены SAN — система ни одного драйвера не просит при установке.

                                                                            Да, если мы к вопросу драйверов — современная техника 2008+ имеет UEFI. Почему и говорю, забудьте про драйвера с последним поколением вин. А на серверных придется забыть и про драйвера на рейд, если современное железо. Ну и UEFI вообще круто круто круто. Наконец можно «прошить ядро винды в биос» (совсем грубо, но типа того).

                                                                              0
                                                                              Да ну вас. Никогда не думал бы, что займусь холиваром.
                                                                              Есть люди, которые совсем консерваторы и вот как воспитаны на стереотипах — даже не хотят идти в ногу со временем и разбираться в современных технологиях. Они и сожгли в свое время Галилея.
                                                                              Есть люди, которые изучают космос и не верят в то, что нельзя потрогать.

                                                                              Причем оба спорят в теме про черепах о устройстве вселенной ))))

                                                                              Ребята! Вышла бета iOS 7!
                                                                              Го сдк копать!
                                                                                +1
                                                                                Мы кажется и не занимаемся холиваром, это вы зачем-то на никсы наехали.
                                                                                Я лишь утверждаю, что ситуация несколько надумана и что в никсах таки консоль в несколько раз удобнее и мощнее — микрософту еще работать и работать. В текущем состоянии всей этой фигни я даже задумываться не буду о вероятности переноса чего-нибудь находящегося под моим контролем на Windows Server.
                                                                                0
                                                                                Server 2012 я к сожалению в глаза не видел, спорить не буду. Там где мне приходится сталкиваться с виндой везде 2003 или 2008.

                                                                                UEFI начал появляться только в последние 2 года.
                                                                                  0
                                                                                  UEFI и Windows Server 2012 не отменяет необходимости в драйверах. Вам просто повезло, что драйвер для HBA оказался в дистрибутиве, но его всё равно надо обновлять при закрытии критических багов.

                                                                                  h20000.www2.hp.com/bizsupport/TechSupport/SoftwareIndex.jsp?lang=en&cc=us&prodNameId=5214503&prodTypeId=15351&prodSeriesId=5177953&swLang=8&taskId=135&swEnvOID=4138#113100
                                                                                  www-933.ibm.com/support/fixcentral/systemx/selectFixes?parent=System+x3550+M4&product=ibm/systemx/7914&&platform=All&function=all (у них и правда нет категории для 2012, но это косяк сайта)
                                                                              –1
                                                                              Когда можно будет писать хотя бы что-то в духе

                                                                              В PowerShell 3.0 сделали:
                                                                              Set-NetIPAddress -InterfaceIndex 10 -IPAddress 192.168.0.5 -PrefixLength 24
                                                                                0
                                                                                и стало еще более громоздко и непонятно, угу
                                                                                индекс интерфейса где брать? отдельной командой вероятно?
                                                                                зачем все эти полные именования параметров, зачем вообще все эти параметры… жесть
                                                                                  0
                                                                                  Знаете другой способ указать какому интерфейсу назначать конкретный адрес? В Linux тоже надо указывать ethX при подобных операций.

                                                                                  А командлеты понятны без расшифровки, параметры дописываются через автодополнение и есть справка с примерами.
                                                                                  С последним проблемы у многих линуксовых утилит, когда --usage выдаёт что-то вроде: cmd <-abcdefABCDEF>, а в man нет ни одного примера использования.
                                                                                    0
                                                                                    ну вон у netsh используется имя интерфейса, это нагляднее
                                                                                    ethX это тоже имя, а не какой-то внутренний идентификатор, его можно изменить

                                                                                    насчет документации — да уж, наверняка у микрософт она больше, кто бы спорил
                                                                                    и то что все понятно без расшифровки — тоже не спорю
                                                                                    но чем вам непонятен такой вариант?
                                                                                    ifconfig eth0 192.168.0.5/24
                                                                                      0
                                                                                      Понятен, но я за наглядность.
                                                                                      Это как сравнивать Perl и Python, в первом можно упаковать всю программу в одну строку, а второй заставляет делать отступы для вложенных команд.
                                                                                        0
                                                                                        А по поводу идентификаторов — его тоже можно использовать, заменив InterfaceIndex на InterfaceAlias. Или сделать пайп с фильтрами, автоматизировав назначение адреса интерфейсу.
                                                                                          0
                                                                                          А после этой командочки, случайно, не надо еще и в конфиг IP-шник прописать, чтобы после перезагрузки не оказаться у разбитого корыта? Или командоску в автозапуск?
                                                                                            0
                                                                                            Надо конечно, только это уже зависит от религии дистрибутива.
                                                                                            Например в Fedora/RHEL выкидываем это все и юзаем одну команду — system-config-network.

                                                                                            Дистронезависимо:
                                                                                            ifconfig eth0 192.168.0.5/24 && echo "ifconfig eth0 192.168.0.5/24" > /etc/rc.local
                                                                                              0
                                                                                              system-config-network — это UI, а «ifconfig > /etc/rc.local» не является корректным решением на RHEL.
                                                                                                0
                                                                                                Да, только это TUI который работает и по ssh.
                                                                                                Равно как и vi /etc/sysconfig/network-scripts/ifcfg-eth0, например.

                                                                                                Какая разница является или не является? Никто не запрещает же, вот в чем суть. Юзаешь в меру своей криворукости.
                                                                            0
                                                                            Не могли бы вы пояснить, в чем такая принципиальная разница не дающая использовать ENter-PSSession?

                                                                            >>Enter-Pssession дает нам консоль удаленного сервера

                                                                            Мне вот так казалось, что это все равно что выполнять команды на удаленном компе, только в одном контексте. Грубо говоря, Invoke-Command аналогичен созданию сессии, выполнению команды и закрытию сессии
                                                                              0
                                                                              Принципиальная разница была в том, что когда я пробовал Enter-Psession, то забыл про -Credential. Работают как Invoke-Command, так и Enter-Pssession.
                                                                              Мне вот так казалось, что это все равно что выполнять команды на удаленном компе, только в одном контексте. Грубо говоря, Invoke-Command аналогичен созданию сессии, выполнению команды и закрытию сессии

                                                                              Да.
                                                                              0
                                                                              Кастуются гуру PS. Как мне добиться от него чтобы работали конструкции вида
                                                                              foo && bar
                                                                              foo || bar
                                                                              foo | bar
                                                                              foo > bar
                                                                              foo >> bar

                                                                              и все аналогичные, а то писать портянки не хочется.
                                                                                +2
                                                                                Модификация ключа HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\fDenyTSConnections не требует перезагрузки. Удалённый рабочий стол начинает работать спустя пару секунд после внесения изменения в реестр.
                                                                                  +1
                                                                                  Согласен. Но все равно считаю, что модификация реестра — последнее дело, которым стоит заниматься.

                                                                                Only users with full accounts can post comments. Log in, please.