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 и повторить попытку. Я опубликую, если это работает для меня.