У меня есть сценарий PowerShell, чтобы получить все компьютеры из коллекции ConfigMgr 2012R2. Скрипт работает от ISE и Shell:
Import-Module (Join-Path (Split-Path $env:SMS_ADMIN_UI_PATH) ConfigurationManager.psd1)
cd "S01:\"$all = Get-CMDevice -CollectionName "All Systems"foreach ($entry in $all) {
write-host $entry.Name
}
Как только я пытаюсь запустить скрипт с сайта, основанного на PHP, ничего не происходит, и массив Output остается пустым. Мне кажется, что модуль загружен без проблем — потому что, если я изменю скрипт на:
$all = Get-Command -Module ConfigurationManager
он помещает все доступные команды в массив php, который затем возвращается на мой сайт.
К сожалению, Get-Command не требует переключения пути выполнения на сайт ConfigMgr, и поэтому я думаю, что это общая проблема. Если я изменяю скрипт на что-то, что печатает текущее местоположение (get-location), он показывает мне родительский каталог скрипта PowerShell, а не сайт, который я пытался изменить, используя cd «S01: \»
Кто-нибудь, кто выяснил те же проблемы, или я что-то забыл?
На всякий случай, если кто-то сталкивается с подобными проблемами: используйте «предпочтение ошибок» powershells для принудительного прерывания сценария при ошибках и используйте «$ _» для распечатки описания ошибки последнего элемента errostack (в php вы должны использовать print_r для выхода функции exec).
После этого он даст важные советы. В моем случае это привело меня к простому «отказу в доступе», который произошел, потому что я забыл предоставить соответствующие SCCM-разрешения учетной записи, с которой работал мой веб-сервис.
Надеюсь, поможет.
Других решений пока нет …