首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Start-Process和powershell.exe with splatting

Start-Process和powershell.exe with splatting
EN

Stack Overflow用户
提问于 2019-10-01 00:36:13
回答 1查看 928关注 0票数 0

我已经尝试了几天了,现在尝试多线程的WPF图形用户界面,它将运行一个PS3.0脚本,一旦按钮被点击。我不能使用start-job,因为我必须跟踪(一次多个会话),但是,我想只在PS的单独进程中运行脚本-就像我要从快捷方式打开脚本的多个实例一样。并且能够只有一个打开的PS窗口,它将跟踪脚本本身的进度。

预期的结果将是在powershell.exe会话中启动脚本并传递3个参数-2个字符串和1个布尔值。其由用户提供。

因此,在ISE中:

代码语言:javascript
复制
C:\temp\test.ps1 -argumentlist $computername $username $citrixtest

工作正常。我花了几个小时在互联网上搜寻,只是为了找到一个推荐开始工作的线程,或者是一种使用后台工作者的方法--这不是我想要的脚本。

所以我猜按钮点击的调用应该是类似的东西(我尝试过的一些东西)

代码语言:javascript
复制
$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在哪里

代码语言:javascript
复制
$ComputerName 
$UserName 
$CitrixTest 
pause

呼叫者:

代码语言:javascript
复制
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脚本的路径。

还有一种不同的方法,脚本中的not也会启动,但不传递参数

代码语言:javascript
复制
$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

有没有办法让它像我想要的那样工作?或者,我应该更深入地挖掘runspaces并尝试它吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-01 01:34:26

@Bill_Stewart我刚刚意识到我没有把参数(Args)放在我的脚本中...这就是为什么它不会像我希望的那样拉出这些变量。当我回到办公室时,我必须检查一下,是否只是我遗漏了这些。

我在运行PS 5.1的笔记本电脑上进行了检查,这似乎可以正常工作

代码语言:javascript
复制
$testarg = @(
    '-File'
    "C:\temp\test.ps1"
    "$computername"
    "$username"
    "$citrixtest"
)

Start-Process powershell.exe -ArgumentList $testarg

其中,test.ps1是:

代码语言:javascript
复制
param(
$ComputerName,
$UserName,
$citrixtest
)

$ComputerName 
$UserName 
$CitrixTest 
pause
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58171937

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档