Резюме: Microsoft Scripting Guy, Ed Wilson рассказывает о некоторых задачах, которые необходимо выполнить после миграции на Windows Server 2012.
Microsoft Scripting Guy, Ed Wilson на связи. После любой миграции всегда остаются некоторые задачи, требующие выполнения. К счастью, в Windows Server 2012 удаленное выполнение команд (Windows PowerShell Remoting) включено по умолчанию. Это весьма неплохо.
Заметка: О личном опыте обновления моих серверов до Windows Server 2012 вы можете прочитать в моем посте: The 32-hour Upgrade to Windows Server 2012.
Первая задача – убедитесь, что вы обновили файлы справки Windows PowerShell
Одна из замечательных функций PowerShell 3.0 – это возможность обновления help-файлов. Это позволяет поддерживать на вашей машине самую последнюю версию справки. После того, как я завершил обновление серверов до Windows Server 2012 (это также справедливо для компьютера с Windows 8 или любого компьютера с Windows PowerShell 3.0) мне нужно запустить командлет Update-Help.
Я бы мог просто запустить командлет Update-Help на каждом компьютере, после чего они скачали бы с интернета последнюю версию файлов справки. Но это неэффективный метод, и Windows PowerShell 3.0 обладает возможностью offline-обновлений.
Итак, на моем ноутбуке (на котором установлены Windows 8 RSAT, и поэтому на нем присутствуют все модули) я запускаю командлет Save-Help. В качестве пути я указываю ему общую папку в моей сети.
Не очень впечатляюще. В чем причина? Папка должна существовать. Я надеялся, что командлет сам ее создаст. Ну, не проблема. Я создам ее самостоятельно.
PS C:\> New-Item -ItemType directory -Path \\dc1\share\poshhelp
Directory: \\dc1\share
Mode LastWriteTime Length Name
—- ————- —— —-
d—- 11/5/2012 2:12 PM poshhelp
PS C:\> Save-Help -Module * -DestinationPath \\dc1\share\poshHelp
Появилась пара ошибок, но это из-за того, что командлет пытается обновить модули, для которых нет обновлений справки. Отлично. Теперь мне нужно обновить файлы справки на всех серверах с Windows Server 2012 при помощи этой общей папки. Это легче, чем кажется. Как вы помните, на моем компьютере установлены RSAT, поэтому у меня есть доступ к командлету Get-ADComputer. С помощью следующей команды я получу список всех серверов на Windows Server 2012 в моей сети.
PS C:\> Get-ADComputer -Filter * -properties operatingsystem | where operatingsystem -match 2012 | select name
name
—-
DC3
DC4
W8SERVER8
W8S504
HYPERV3
SQL1
WDS1
HYPERV2
DC2
WEB1
Я сохраню результаты выполнения команды в переменной cn (не используя командлет Select-Object):
$cn = Get-ADComputer -Filter * -properties operatingsystem | where operatingsystem -match 2012
Используя автоматическое развертывание (expansion) (замечательная функция Windows PowerShell 3.0) можно легко получить имена компьютеров. Для этого нужно просто указать свойство. Я включу это в команду для создания сессии PowerShell. Я знаю, что некоторые компьютеры сейчас выключены, поэтому я ожидаю появления нескольких ошибок.
$session = New-PSSession -cn $cn.name -Credential iammred\administrator
Я запрашиваю значение переменной $sessions, чтобы убедиться, что хотя бы некоторые компьютеры работают.
PS C:\> $session
Id Name ComputerName State ConfigurationName Availability
— —- ———— —— —————— ————
4 Session4 DC3 Opened Microsoft.PowerShell Available
5 Session5 DC4 Opened Microsoft.PowerShell Available
8 Session8 HYPERV3 Opened Microsoft.PowerShell Available
11 Session11 HYPERV2 Opened Microsoft.PowerShell Available
9 Session9 SQL1 Opened Microsoft.PowerShell Available
10 Session10 WDS1 Opened Microsoft.PowerShell Available
13 Session13 WEB1 Opened Microsoft.PowerShell Available
12 Session12 DC2 Opened Microsoft.PowerShell Available
Команды и их вывод представлены ниже:
Теперь я использую командлет Invoke-Command для обновления help-файлов на всех моих серверах:
Invoke-Command -Session $session -ScriptBlock {Update-Help -PSPath \\dc1\Share\poshhelp -Force}
Если бы я хотел обновить файлы справки путем скачивания их из интернета, я бы указал следующую команду:
Invoke-Command -Session $session -ScriptBlock {Update-Help -force}
Естественно, появится еще несколько сообщений об ошибках о недоступности некоторых модулей, но в итоге, я обновил файлы справки на всех моих серверах.
Включение поддержки скриптов
Теперь мне нужно включить на серверах поддержку скриптов.
Это можно сделать также при помощи одного командлета – Set-ExecutionPolicy.
Invoke-Command -Session $session -ScriptBlock {Set-ExecutionPolicy remotesigned -force}
Я могу проверить результаты, воспользовавшись командлетом Get-ExecutionPolicy.
PS C:\> Invoke-Command -Session $session -ScriptBlock {Get-ExecutionPolicy}
PSComputerName RunspaceId Value
————— ———- ——
DC4 571a049f-c671-46e7-b72a-… RemoteSigned
DC3 8cc8e20d-2426-44fd-9ae5-… RemoteSigned
HYPERV3 b3f5afae-1f1b-43ca-918f-… RemoteSigned
SQL1 9609e293-26ff-4866-9734-… RemoteSigned
WEB1 d5dfcde8-2de1-4b8f-9a21-… RemoteSigned
WDS1 75124ffd-5f4b-4e27-91f4-… RemoteSigned
DC2 ea287978-f21f-4f27-85e1-… RemoteSigned
HYPERV2 a4e5f5ab-add7-4fe3-a7a7-… RemoteSigned
Это все, что касается обновления help-файлов и включения поддержки скриптов на моих серверах с Windows Server 2012.
Автор:
Ed Wilson, Microsoft Scripting Guy
Оригинал:
Страницы в социальных сетях:
Twitter: https://twitter.com/vsseth
Facebook: https://fb.com/inpowershell
VKontakte: https://vk.com/inpowershell