none
Установка программы из скрипта PowerShell RRS feed

  • Общие обсуждения

  • Нужно запускать инсталлятор программы из скрипта PowerShell. Создал пакет, внутри пакета дистрибутив программы и скрипт, запускающий установщик с необходимыми параметрами. Создал программу, в командной строке указал powershell.exe -File ".\install.ps1" (так написано во всех примерах, которые удалось найти). По факту, запуск таким образом не работает, т.к. ожидается, что я укажу полный путь к файлу, т.е. powershell.exe -File "\\server1\share1\install.ps1" (проверено опытным путем). Но пакет копируется на точки распространения, а они все называются по-разному, соответственно и пути к скрипту разные.

    Как можно заставить это работать?

    • Изменен тип Rotar MaksimModerator 26 ноября 2012 г. 15:40 Тема переведена в разряд обсуждений по причине отсутствия активности
    14 ноября 2012 г. 13:19

Все ответы

  • Попробуйте в свойствах Advertisment-а установить опцию "Download content from distribution point and run locally".

    http://technet.microsoft.com/en-us/library/bb680566.aspx

    14 ноября 2012 г. 15:29
  • Вот этого мне бы делать, как раз, не хотелось, т.к. дистрибутив большой (несколько Гб). Удобнее запускать его напрямую с точки распространения. Но я, на всякий случай, попробую этот вариант.
    14 ноября 2012 г. 16:34
  • В таком случае не удобно ли просто держать инсталляционные файлы на шаре какого-то сервера (без добавления их на DP) и запуска установки оттуда?

    http://sccm.com.ua/

    14 ноября 2012 г. 22:35
    Отвечающий
  • У меня сеть с кучей филиалов, нет шары, которая была бы доступна отовсюду, кроме netlogon, а хранить дистрибутив там, считаю, неправильным. Тем более, хотелось бы выполнить задачу стандартными средствами sccm, не используя костылей.
    15 ноября 2012 г. 1:30
  • По умолчанию Powershell требует, чтобы скрипт был подписан для удаленного выполнения с шары. И вам надо либо его подписать, либо изменить политику безопасности.

    Вот пример http://dynamicdatacenter.wordpress.com/2012/10/01/run-powershell-script-from-software-package/


    Сазонов Илья http://isazonov.wordpress.com/

    15 ноября 2012 г. 4:57
    Модератор
  • Об этом я, конечно же, позаботился при помощи групповой политики.

    PS C:\> Get-ExecutionPolicy
    Unrestricted

    Повторюсь еще раз: если я указываю в sccm полный путь к файлу скрипта - все работает.

    15 ноября 2012 г. 5:17
  • >>в командной строке указал powershell.exe -File ".\install.ps1" (так написано во всех примерах, которые удалось найти). По факту, запуск таким образом не работает,<<

    А вы смотрели execmgr.log на клиенте что при этом пишется туда

    >>powershell.exe -File "\\server1\share1\install.ps1" (проверено опытным путем). Но пакет копируется на точки распространения, а они все называются по-разному, соответственно и пути к скрипту разные.<<

    В этом случае соглашусь с Евгением, что проще использовать dfs шары выкладывать туда и  создавать пакет без соурс файлов не задействуя DP, но как видно не получится:

    >>У меня сеть с кучей филиалов, нет шары, которая была бы доступна отовсюду, <<

    >>PS C:\> Get-ExecutionPolicy
    Unrestricted<<

    Все же попробуйте не Unrestricted a Bypass:

    • Unrestricted: Loads all configuration files and runs all scripts. If you run an unsigned script that was downloaded from the Internet, you are prompted for permission before it runs.
    • Bypass: Nothing is blocked and there are no warnings or prompts.

    >>Повторюсь еще раз: если я указываю в sccm полный путь к файлу скрипта - все работает.<<

    посмотрите execmgr.log, когда не работает

    Также, наколько я понимаю, если ваш пош имеет ссылки на запуск других файлов данного пакета , там также необходимо указывать путь, по идее, используя Get-ScriptDirectory


    15 ноября 2012 г. 6:22
    Отвечающий
  • В execmgr.log смотрел, там все в порядке (это пример, когда не работает, как раз попробовал с байпасом):

    Verifying content availability for package 0010016E optional program Silent Install execmgr 15.11.2012 13:00:00 3428 (0x0D64)
    Requesting content from CAS for package 0010016E version 4 execmgr 15.11.2012 13:00:00 3428 (0x0D64)
    Successfully created a content request handle {C37A9716-6EDD-4A8D-BE71-0C688C883FE2} for the package 0010016E version 4 execmgr 15.11.2012 13:00:00 3428 (0x0D64)
    Content availability verification for package 0010016E program Silent Install is in progress execmgr 15.11.2012 13:00:00 3428 (0x0D64)
    Content for optional program is now available. The location request ID is {C37A9716-6EDD-4A8D-BE71-0C688C883FE2} execmgr 15.11.2012 13:00:00 2464 (0x09A0)
    CUIEventGenerator::NotifyContentStatus entered with new execmgr 15.11.2012 13:00:00 2464 (0x09A0)
    CUIEventGenerator::NotifyContentStatus left execmgr 15.11.2012 13:00:00 2464 (0x09A0)
    Validating chain of dependent programs for package 0010016E optional program Silent Install execmgr 15.11.2012 13:00:00 3428 (0x0D64)
    Validating package 0010016E program Silent Install in the chain. The content request ID is {C37A9716-6EDD-4A8D-BE71-0C688C883FE2} execmgr 15.11.2012 13:00:00 3428 (0x0D64)
    Creating an optional execution request for package 0010016E program Silent Install execmgr 15.11.2012 13:00:01 3428 (0x0D64)
    CExecutionRequest::EnterRsRuningState Silent Install execmgr 15.11.2012 13:00:01 3428 (0x0D64)
    Execution Manager timer has been fired. execmgr 15.11.2012 13:00:01 2464 (0x09A0)
    Executing program powershell.exe -ExecutionPolicy Bypass -NoLogo -NonInteractive -NoProfile -WindowStyle Hidden -File ".\install.ps1" in Admin context execmgr 15.11.2012 13:00:01 3428 (0x0D64)
    Execution Request for package 0010016E program Silent Install state change from NotExist to NotifyExecution execmgr 15.11.2012 13:00:01 3428 (0x0D64)
    Persisting request for program Silent Install package 0010016E in state Running execmgr 15.11.2012 13:00:01 3428 (0x0D64)
    ExecuteScriptByScriptEngine: User context passed to ExecuteProgram is [NT AUTHORITY\SYSTEM]. execmgr 15.11.2012 13:00:01 3428 (0x0D64)
    CExecutionContext::CExecutionContext execmgr 15.11.2012 13:00:01 3428 (0x0D64)
    Command line arguments when parsed powershell.exe execmgr 15.11.2012 13:00:01 3428 (0x0D64)
    Command line arguments when parsed -ExecutionPolicy execmgr 15.11.2012 13:00:01 3428 (0x0D64)
    Command line arguments when parsed Bypass execmgr 15.11.2012 13:00:01 3428 (0x0D64)
    Command line arguments when parsed -NoLogo execmgr 15.11.2012 13:00:01 3428 (0x0D64)
    Command line arguments when parsed -NonInteractive execmgr 15.11.2012 13:00:01 3428 (0x0D64)
    Command line arguments when parsed -NoProfile execmgr 15.11.2012 13:00:01 3428 (0x0D64)
    Command line arguments when parsed -WindowStyle execmgr 15.11.2012 13:00:01 3428 (0x0D64)
    Command line arguments when parsed Hidden execmgr 15.11.2012 13:00:01 3428 (0x0D64)
    Command line arguments when parsed -File execmgr 15.11.2012 13:00:01 3428 (0x0D64)
    Command line arguments when parsed ".\install.ps1" execmgr 15.11.2012 13:00:01 3428 (0x0D64)
    Checking content location \\server-sccmshr.ab.ru\SMSPKGE$\0010016E\ for use execmgr 15.11.2012 13:00:01 3428 (0x0D64)
    Successfully selected content location \\server-sccmshr.ab.ru\SMSPKGE$\0010016E execmgr 15.11.2012 13:00:01 3428 (0x0D64)
    GetFileVersionInfoSize failed for file \\server-sccmshr.ab.ru\SMSPKGE$\0010016E\powershell.exe, error 1812 execmgr 15.11.2012 13:00:01 3428 (0x0D64)
    CProgramExecution::CProgramExecution execmgr 15.11.2012 13:00:01 3428 (0x0D64)
    Executing program as a script execmgr 15.11.2012 13:00:01 3428 (0x0D64)
    File \\server-sccmshr.ab.ru\SMSPKGE$\0010016E\powershell.exe is not a valid executable file execmgr 15.11.2012 13:00:01 3428 (0x0D64)
    File \\server-sccmshr.ab.ru\SMSPKGE$\0010016E\powershell.exe is not a valid executable file execmgr 15.11.2012 13:00:01 3428 (0x0D64)
    Found executable file powershell.exe with complete path C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe execmgr 15.11.2012 13:00:01 3428 (0x0D64)
    Successfully prepared command line "C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe" -ExecutionPolicy Bypass -NoLogo -NonInteractive -NoProfile -WindowStyle Hidden -File ".\install.ps1" execmgr 15.11.2012 13:00:01 3428 (0x0D64)
    Command line = "C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe" -ExecutionPolicy Bypass -NoLogo -NonInteractive -NoProfile -WindowStyle Hidden -File ".\install.ps1", Working Directory = \\server-sccmshr.ab.ru\SMSPKGE$\0010016E\ execmgr 15.11.2012 13:00:01 3428 (0x0D64)
    Created Process for the passed command line execmgr 15.11.2012 13:00:01 3428 (0x0D64)
    Raising event:
    [SMS_CodePage(866), SMS_LocaleID(1049)]
    instance of SoftDistProgramStartedEvent
    {
    AdvertisementId = "00120255";
    ClientID = "GUID:0802ac73-c122-418c-9f58-fe11403186a6";
    CommandLine = "\"C:\\WINDOWS\\system32\\WindowsPowerShell\\v1.0\\powershell.exe\" -ExecutionPolicy Bypass -NoLogo -NonInteractive -NoProfile -WindowStyle Hidden -File \".\\install.ps1\"";
    DateTime = "20121115070001.276000+000";
    MachineName = "WXPVIRT-KONOVAL";
    PackageName = "0010016E";
    ProcessID = 1740;
    ProgramName = "Silent Install";
    SiteCode = "001";
    ThreadID = 3428;
    UserContext = "NT AUTHORITY\\SYSTEM";
    WorkingDirectory = "\\\\server-sccmshr.ab.ru\\SMSPKGE$\\0010016E\\";
    };
    execmgr 15.11.2012 13:00:01 3428 (0x0D64)
    Raised Program Started Event for Ad:00120255, Package:0010016E, Program: Silent Install execmgr 15.11.2012 13:00:01 3428 (0x0D64)
    GetProcessInfo - Process creation time high = 30262014, low = 3570502932 execmgr 15.11.2012 13:00:01 3428 (0x0D64)
    Execution Manager received Temp Path C:\WINDOWS\TEMP\ execmgr 15.11.2012 13:00:01 3428 (0x0D64)
    Power lease started with ID = 11247 for 3600 seconds execmgr 15.11.2012 13:00:01 3428 (0x0D64)
    Persisting request for program Silent Install package 0010016E in state Running execmgr 15.11.2012 13:00:01 3428 (0x0D64)
    CExecutionRequestManager::OnTimer - Processing the ClearNewProgramNotificationTimer execmgr 15.11.2012 13:00:01 2464 (0x09A0)
    CExecutionRequestManager::ProcessClearNewProgramNotificationTimer execmgr 15.11.2012 13:00:01 2464 (0x09A0)
    Entering CTimerTask::CancelTimer. execmgr 15.11.2012 13:00:01 2464 (0x09A0)
    CUIEventGenerator::ClearNewProgramAvailable entered execmgr 15.11.2012 13:00:01 2464 (0x09A0)
    CUIEventGenerator::ClearNewProgramAvailable succeeded execmgr 15.11.2012 13:00:01 2464 (0x09A0)
    CUIEventGenerator::ClearNewProgramAvailable entered execmgr 15.11.2012 13:00:01 2464 (0x09A0)
    CUIEventGenerator::ClearNewProgramAvailable succeeded execmgr 15.11.2012 13:00:01 2464 (0x09A0)

    Собственно, после запуска висит процесс powershell.exe, больше ничего не происходит. Он либо прерывается по тайм ауту, либо я закрываю его вручную.

    15 ноября 2012 г. 7:11
  • Скорее всего для Posh висит какой-то пользовательский запрос, также скорее всего к данной шаре, с которой запускается скрипт нет доступа для Everyone, либо для Domain Computers. Как уже выше заметили, лучше в команде используйте powershell.exe -ExecutionPolicy bypass. Дистрибутив, если хотите запускать с точки распространения, то просто укажите это в свойствах адвертайзмента (или деплоймента) - Run Directly from Distribution Point. Также можете написать какой нибудь дебаггер в скрипте, который будет писать шаги в текстовый файл или в эвент лог.

    Vladimir Zelenov | http://systemcenter4all.wordpress.com

    15 ноября 2012 г. 13:19
    Отвечающий
  • Для powershell висит не пользовательский запрос, а сообщение о том, что он не может найти файл скрипта. Доступ к шаре в порядке. Не вижу смысла использовать bypass, т.к. в данном конкретном случае дело не в политике. Как запускать дистрибутив с точки распространения я знаю прекрасно, все нужные галки установлены. Дебаггер в скрипте писать бессмысленно, т.к. сам скрипт не запускается. Повторю еще раз: дело не в скрипте, не в политике, не в доступе к шаре, а в способе запуска: powershell хочет полный путь к файлу скрипта, который указать нет возможности, т.к. путь всегда разный. Относительные пути powershell принимать не хочет.
    16 ноября 2012 г. 1:24
  • Да не. Всё нормально принимается. В свое время я тоже писал таск сиквенс, который вызывал скрипты PoSh, к сожалению не сохранился. Кстати, попробуйте через TS, может получится таким образом.


    Vladimir Zelenov | http://systemcenter4all.wordpress.com

    16 ноября 2012 г. 5:18
    Отвечающий
  • Для powershell висит не пользовательский запрос, а сообщение о том, что он не может найти файл скрипта. Доступ к шаре в порядке. Не вижу смысла использовать bypass, т.к. в данном конкретном случае дело не в политике. Как запускать дистрибутив с точки распространения я знаю прекрасно, все нужные галки установлены. Дебаггер в скрипте писать бессмысленно, т.к. сам скрипт не запускается. Повторю еще раз: дело не в скрипте, не в политике, не в доступе к шаре, а в способе запуска: powershell хочет полный путь к файлу скрипта, который указать нет возможности, т.к. путь всегда разный. Относительные пути powershell принимать не хочет.

    И всё таки, вы точно уверены, что с доступом всё в порядке? Попробуйте запустить командную строку от имени системы и убедиться.

    Vladimir Zelenov | http://systemcenter4all.wordpress.com

    16 ноября 2012 г. 5:19
    Отвечающий
  • Уважаемый пользователь!
    В вашей теме отсутствует активность в течение последних 5 дней. При отсутствии каких-либо действий в течение 2 последующих дней, тема будет переведена в разряд обсуждений. Вы можете возобновить дискуссию, просто оставив сообщение в данной теме.

    Мнения, высказанные здесь, являются отражением моих личных взглядов, а не позиции корпорации Microsoft. Вся информация предоставляется "как есть" без каких-либо гарантий

    21 ноября 2012 г. 15:58
    Модератор
  • Тема переведена в разряд обсуждений по причине отсутствия активности

    Мнения, высказанные здесь, являются отражением моих личных взглядов, а не позиции корпорации Microsoft. Вся информация предоставляется "как есть" без каких-либо гарантий

    26 ноября 2012 г. 15:40
    Модератор