PowerShell на SCOM не может импортировать модуль

У меня есть проблема, которую я не могу решить без помощи) У меня есть SCOM на первом ПК, и у меня есть агент SCOM на втором. Когда мой класс обнаруживается в агентском ПК, он должен запустить скрипт PowerShell. Этот скрипт содержит команду:

Импорт-модуль отказоустойчивых кластеров

но эта команда не выполняется с исключением:

При загрузке файла данных расширенного типа произошла следующая ошибка: Microsoft.PowerShell, C:\Windows\system32\WindowsPowerShell\v1.0\Modules\FailoverClusters\FailoverClusters.Types.ps1xml: файл пропущен, поскольку он уже присутствовал у "Microsoft". PowerShell".

Я не знаю что делать.

3 ответа

Решение

Как отмечается в этом сообщении, вы можете игнорировать ошибки данных расширенного типа при загрузке модулей. Он говорит вам, что тип уже загружен и не может загрузить его во второй раз.

Временное решение:

Я обнаружил, что с SCOM 2007 R2 (еще не проверял это на SCOM 2012), powershell не может импортировать модуль FailoverClusters. Я попробовал предложение пропустить ошибку. Пропуск работает в самый первый раз, когда агент выполняет скрипт. После этого при последующем выполнении сценария не будет доступен командлет Get-Cluster. Каждый раз, когда вы перезапускаете агент, он пропускает ошибку, и командлет становится доступным, но снова при последующих выполнениях не удается загрузить командлет. Повышенные разрешения и неограниченное выполнение скриптов не помогли решить проблему.

Регулярный перезапуск агента - вот такая кувалда. Я не развлекал это.

Однако я обнаружил, что если я использовал легкий скрипт, который порождает новый экземпляр powershell и выполняет мой основной код (файл сохраняется на диске или генерирует скрипт на диске на лету), свежий экземпляр powershell каждый раз успешно загружал модуль и командлет был всегда доступен.

Я знаю, что есть опасения, что порождение одного экземпляра из другого (например, vbscript spawing powershell) имеет проблемы с перфорированием. Но в моем случае я смог заставить агента вызвать мою оболочку powershell, сгенерировать 500-строчный скрипт на лету (используя streamwriter для perf), а затем создать его в новой оболочке powershell. Все это выполнялось примерно за 6 секунд, включая запросы Get-ClusterResources.

Я предполагаю, что это ошибка в агенте SCOM...

Скрипт Powershell (GPO_Discovery.ps1) вызвал метод WriteErrorLine для вывода следующих данных:

 Import-Module : The following error occurred while loading the extended type data file: 

Microsoft.PowerShell, C: \ Windows \ system32 \ WindowsPowerShell \ v1.0 \ Modules \ ActiveDirectory \ ActiveDirectory.Types.ps1xml: файл пропущен, поскольку он уже присутствовал в Microsoft.PowerShell.

Как видно, у меня та же проблема при попытке запустить:

Import-Module ActiveDirectory
Import-Module GroupPolicy

Итак, я попробовал:

Import-Module -Name ActiveDirectory -OutVariable $outAD -ErrorAction SilentlyContinue
Import-Module -Name GroupPolicy -OutVariable $outGP -ErrorAction SilentlyContinue

Ни один из них не помог. Я собираюсь попытаться полностью удалить Import CMD-Let и повторить попытку. Я опубликую, если это работает для меня.

Другие вопросы по тегам