2017-02-03 14 views
-1

Я попытался выполнить следующие команды из Дженкинс последовательно:Как выполнить несколько команд Powershell от одного сеанса

Import-Module -Name "C:\Program Files (x86)\Microsoft Configuration Manager\AdminConsole\bin\ConfigurationManager.psd1" 
cd IPL: 

Но, похоже, Дженкинс выпускает сеанс после выполнения каждой команды. Поэтому мы попытались сохранить задержку между двумя команды, но не повезло:

Import-Module -Name "C:\Program Files (x86)\Microsoft Configuration Manager\AdminConsole\bin\ConfigurationManager.psd1" 
Start-Sleep -s 5 
cd IPL: 

При выполнении сценария, Дженкинс не принимает каждую команду из своего рабочего пространства каталога D:\jenkins\workspace\<JobName>. Я искал, чтобы изменить конфигурацию таким образом, где Jenkins выполнит весь скрипт (со всеми командами внутри) с того же диска, где находится скрипт. Не из рабочего пространства Дженкинса.

Но не такие материалы доступны в Google. Я посмотрел в модификации области Дженкинс Workspace (Jenkins-> Управление Jenkins-> Настройка системы и нажмите на Advanced)

Jenkins Workspace Modification

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

Можно ли каким-либо образом выполнить всю команду (из одного сценария powershell) без завершения сеанса для каждой команды? Так что скрипт сценария powershell может быть выполнен только для его собственного каталога?

+0

jenkins определенно не закрывает сеанс PS между командами PS – 4c74356b41

+0

Любая идея, почему после импорта SCCM * .psd модулей команда cd : не работает? – Krish

+0

хорошо, вы проверили, что импорт преуспевает? можете ли вы хотя бы увидеть команды в сеансе? – 4c74356b41

ответ

0

В любом случае, чтобы ответить на этот вопрос (не касаясь части SCCM).

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

Что касается второго вопроса, вы можете использовать Set-Location, чтобы изменить текущий рабочий каталог powershell.

+0

На самом деле, мы смогли выполнить несколько команд в сеансе PS.Единственная проблема заключается в том, что после импорта модуля сеанс недоступен/активен. Когда мы выполняем эти команды вручную из командной строки Windows, можно увидеть IPL CMdrive (Virtual). Но когда те же команды, выполненные через Windows PS на Jenkins, получение указанной ошибки «IPL-диск не существует» – Krish

+0

Сообщение об ошибке от Jenkins: Set-Location: Не удается найти диск. Диска с именем «IPL» не существует. В C: \ Windows \ TEMP \ hudson5556720245749845343.ps1: 4 char: 1 + Set-Location IPL: -verbose + ~~~~~~~~~~~~~ ~~~~ + CategoryInfo: ObjectNotFound: (IPL: String) [Set-Location], Dri veNotFoundException + FullyQualifiedErrorId: DriveNotFound, Microsoft.PowerShell.Commands.SetL ocationCommand – Krish

+0

хорошо, этот вопрос не о SCCM, а о выполнении всех команд за один сеанс, и это ответ на этот вопрос @Krish – 4c74356b41

0

Windows Powershell запускается с использованием учетной записи \ Administrator, а Jenkins работает с системной учетной записью. Таким образом, мы изменили службу входа в систему Jenkins из учетной записи системы на учетную запись домена: сначала скачайте «PsExec.exe» и выполните следующую команду из командной строки («C: \ Users \ Administrator.DUMMYIPSL \ Desktop \ PsExec.exe» -i -s cmd.exe)/Во-вторых, откройте сервис Jenkins и откройте вкладку свойств. Теперь перейдите на вкладку «Вход», чтобы изменить привилегии с учетной записи системы на учетную запись администратора домена и перезапустить службу Jenkins для выполнения сценария./В-третьих, затем сработала сборка от Дженкинса, и это сработало.