Skip to content

Установка SMLets на компьютер без консоли SCSM

Установка SMLets на компьютер без консоли SCSM published on Комментариев к записи Установка SMLets на компьютер без консоли SCSM нет

Модуль SMLets требует для своей работы консоль SCSM, а также скопированную библиотеку Microsoft.EnterpriseManagement.Core.dll с сервера SCSM. Но на самом деле это требование не такое уж и жесткое, и в этой статье пойдет речь о том, как установить SMLets на сервер, где нет консоли управления SCSM. Это может быть полезно например на сервере Opalis\Orchestrator, или на любом другом сервере, который должен взаимодействовать с серверами SCSM с помощью PowerShell.

Для установки SMLets потребуется выполнить несколько действий:

  1. Скачать и установить на сервер SMLets
  2. Отключить обязательное подписание скриптов в PowerShell
  3. Установить библиотеки SCSM в GAC (Global Assembly Cache)
  4. Изменить настроечный файл SMLets

Итак, приступим.

Установка SMLets

Тут нет ничего военного. Качаем самую свежую версию SMLets, и устанавливаем. На момент написания статьи SMLets распросранался в виде msi-пакета, и особых хлопот при установке не создавал, даже если на сервере включен UAC. Единственное, что можно отметить, что на выделенном сервере можно не устанавливать компоненты Data Gen и тестовые скрипты.

Отключение проверки подписи скриптов в PowerShell

По умолчанию, в PowerShell действует политика проверки подписи скриптов (Restricted), и если ваш скрипт не будет подписан, выполнение его будет заблокировано.

Для того, чтобы изменить политику, необходимо вызывать PowerShell от имени администратора (т.е. с повышенными привилегиями) и выполнить команду:

Set-ExecutionPolicy Unresricted

После чего подтвердить установку политики, нажав Y.

Установка библиотек SCSM в GAC

Затем необходимо установить библиотеки Microsoft.EnterpriseManagement.Core.dll и Microsoft.EnterpriseManagement.ServiceManager.dll в GAC. Это необходимо, чтобы при их подключении не заботиться о полном пути к этим библиотекам.

Самый простой способ это сделать следующий:

  1. Открыть два окна проводника, в первом – папку C:\Windows\Assembly, во втором – папку \\%имя_сервера_SCSM%\c$\Program Files\Microsoft System Center\Service Manager 2010\SDK Binaries\.
  2. Перетащить (drap-and-drop) файлы Microsoft.EnterpriseManagement.Core.dll и Microsoft.EnterpriseManagement.ServiceManager.dll в окном с папкой C:\Windows\Assembly
  3. Проверить, что в списке папки C:\Windows\Assembly появились Microsoft.EnterpriseManagement.Core и Microsoft.EnterpriseManagement.ServiceManager:
    image

Собственно всё.

Изменение файла SMLets.psm1

Теперь необходимо отредактировать файл SMLets.psm1 из модуля SMLets. Сам модуль находится по адресу C:\Windows\System32\WindowsPowerShell\v1.0\Modules\SMLets. Замечу, что на х64 серверах файл SMLets.psm1 необходимо открывать 64х-битным редактором, например Блокнот. А вот к примеру Notepad++ “не увидит” этот файл, т.к. является 32х-битным приложением. Кроме этого, при включенном UAC редактор надо запускать с повышенными привилегиями.

В файле SMLets.psm1 необходимо произвести следующие изменения (приведена только начальная  часть файла с изменениями):

#requires -version 2.0
# handy global variables
$GLOBAL:SMADLL   = ([appdomain]::CurrentDomain.getassemblies()|?{$_.location -match "System.Management.Automation.dll"}).location
#$GLOBAL:SMDIR    = (Get-ItemProperty 'hklm:/software/microsoft/System Center/2010/Service Manager/Setup').InstallDirectory
#$GLOBAL:SMSDKDIR = "${SMDIR}\SDK Binaries"
#$GLOBAL:SMDLL    = "${SMSDKDIR}/Microsoft.EnterpriseManagement.Core.dll"
$GLOBAL:EMGTYPE  = "Microsoft.EnterpriseManagement.EnterpriseManagementGroup"
$GLOBAL:DATAGENDIR = "$psScriptRoot\DataGen"


<#
.SYNOPSIS
    Load an assembly into the current process space
.DESCRIPTION
    Provides a quick way of loading an assembly into the current process.
.PARAMETER Dll
    The assemply to load. This can be either a file name or full path
.EXAMPLE
    Import-Assembly "C:\Program Files\Microsoft System Center\Service Manager 2010\SDK Binaries\Microsoft.EnterpriseManagement.Core.dll"
.OUTPUTS
    No output
#>
function import-Assembly
{
    [CmdletBinding(SupportsShouldProcess=$true)]

    param ( 
        [parameter(Mandatory=$true,Position=0)]$dll ,
        [switch]$partial
        )
    end
    {
        $dllpath = (resolve-path $dll).path
        if ( $partial )
        {
            [reflection.assembly]::LoadWithPartialName($dll)
        }
        else
        {
            [reflection.assembly]::LoadFile($dllpath)
        }
    }
}
# load the Service Manager Core assembly
set-alias -scope global load import-assembly
#load $SMDLL | out-null
[reflection.assembly]::LoadWithPartialName("Microsoft.EnterpriseManagement.Core.dll")  | out-null

$GLOBAL:smdefaultcomputer = "SCSMSERVERNAME"

Необходимо закомментировать строки 4, 5 и 6 (у нас таких путей и ключей реестра всё равно нет) и строку 45. После чего добавить строку 46 (загружаем библиотеку SCSM) и 48 (указываем с каким сервером работать, обсуждалось в прошлой статье). Обратите внимание на префикс GLOBAL – он указывает, что переменная должна действовать в рамках данной сессии PowerShell, а не только текущего контекста выполнения.

Заключение

На этом настройка закончена, запускайте PowerShell, и выполняйте любые команды из состава SMLets:

import-module SMLets
Get-SCSMWhoAmI
Get-SCSMIncident

Поделиться в соц. сетях

Primary Sidebar