Я уже несколько дней пытаюсь создать многопоточную оболочку WPF GUI, которая будет запускать скрипт PS3.0 после нажатия кнопки. Я не могу использовать start-job, так как мне придется отслеживать (несколько сессий одновременно), однако я хотел бы просто запустить скрипт в отдельном процессе PS - как если бы я открывал несколько экземпляров скрипта изярлык. И иметь возможность просто иметь открытое окно PS, которое будет отслеживать ход выполнения самого скрипта.
Ожидаемые результаты: запуск скрипта в сеансе powershell.exe и передача 3 аргументов - 2 строки и 1 логическое значение. Которые предоставляются пользователем.
Так в ISE:
C:\temp\test.ps1 -argumentlist $computername $username $citrixtest
Работает нормально. Я потратил несколько часов, просматривая Интернет, только чтобы найти нить, в которой рекомендовано стартовое задание или способ использования фонового работника - это не то, чего я хочу от сценария.
Так что япредположил бы, что вызов от нажатия кнопки был бы чем-то подобным (некоторые вещи, которые я пробовал)
$ComputerName = "testtext1"
$UserName = "testtext2"
$CitrixTest = $True
$command = "c:\temp\test.ps1"
$arg = @{
Computername = "$computername";
Username = "$username";
CitrixTest = "$citrixtest"
}
#$WPFStartButton.Add_Click({
Start-Process powershell -ArgumentList "-noexit -command & {$command} -argumentlist $arg"
#})
Не передает аргументы в test.ps1 - однако, это добирается до "pause "- так скрипт успешно запускается.
Где test.ps1
$ComputerName
$UserName
$CitrixTest
pause
Вызывающий:
function Caller {
Param (
$ScriptPath = "c:\temp\test.ps1"
)
$Arguments = @()
$Arguments += "-computername $ComputerName"
$Arguments += "-UserName $UserName"
$Arguments += "-citrixtest $citrixtest"
$StartParams = @{
ArgumentList = "-File ""$ScriptPath""" + $Arguments
}
Start-Process powershell @StartParams
}
Caller
Не запускает скрипт вообще - окно PS простозакрывает - возможно, путь к сценарию .ps1 не найден.
И запускается другой подход, который также используется в сценарии, но не передает аргументы
$scriptFile = '"C:\temp\test.ps1"'
[string[]]$argumentList = "-file"
$argumentList += $scriptFile
$argumentlist += $computername
$argumentlist += $UserName
$argumentlist += $CitrixTest
$start_Process_info = New-Object System.Diagnostics.ProcessStartInfo
$start_Process_info.FileName = "$PSHOME\PowerShell.exe"
$start_Process_info.Arguments = $argumentList
$newProcess = New-Object System.Diagnostics.Process
$newProcess.StartInfo = $start_Process_info
$newProcess.Start() | Out-Null
Есть ли способ сделатьэта работа как я хочу? Или мне просто покопаться глубже в пространствах проб и попробовать с этим?