我已经尝试了几天,对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-,而是进入“暂停”状态-因此脚本成功启动。
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
有没有一种方法可以使它按我的意愿进行?还是我应该更深入地研究运行空间并尝试一下?
答案 0 :(得分:0)
@Bill_Stewart我只是意识到我没有将param(args)放在我的脚本中... 这就是为什么它不会像我希望的那样拉那些变量。我将不得不检查我何时回到办公室,是否只是我所缺少的。
在我的运行PS 5.1的笔记本电脑上检查了一下,它似乎可以正常工作
$testarg = @(
'-File'
"C:\temp\test.ps1"
"$computername"
"$username"
"$citrixtest"
)
Start-Process powershell.exe -ArgumentList $testarg
test.ps1在哪里:
param(
$ComputerName,
$UserName,
$citrixtest
)
$ComputerName
$UserName
$CitrixTest
pause