powershell - 通过invoke-expression将参数传递给第二个ps1文件后,关闭PS1

标签 powershell invoke-command

我的GUI具有很多功能,但是我需要构建的一件事是使用它的工作人员的工作人员ID号,因此我可以添加其他功能。我试图通过创建一个登录框来做到这一点。(不需要密码)

我的第一个PS1打开并提供一个输入框,然后我使用invoke-expression调用第二个PS1,并在参数中传递人员ID号。

我的问题是第一个PS1文件保持打开状态,直到我关闭第二个PS1文件后才会关闭。
我希望它在登录后关闭,让第二个运行

这是我的login.ps1

Add-Type -AssemblyName System.Windows.Forms
$form = New-Object Windows.Forms.Form
$form.Size = New-Object Drawing.Size @(210,75)
$form.StartPosition = "CenterScreen"
$Form.Text = "Please Login"


$Label = New-Object System.Windows.Forms.Label
$Label.Location = New-Object System.Drawing.Size(5,5) 
$Label.Size = New-Object System.Drawing.Size(55,20) 
$Label.Text = "Staff no:"
$Form.Controls.Add($Label) 

$numInputBox = New-Object System.Windows.Forms.TextBox
$numInputBox.Location = New-Object System.Drawing.Size(60,5) 
$numInputBox.Size = New-Object System.Drawing.Size(50,26) 
$numInputBox.text = ""
$numInputBox.add_Keydown({if ($_.KeyCode -eq "Enter") 
    {login}})
$form.Controls.Add($numInputBox)


Function login {
$sdnum = $numInputBox.text

Invoke-Expression "C:\servicedesk\sdtool.ps1 '$sdnum'"

}

$loginbutton = New-Object System.Windows.Forms.Button
$loginbutton.Size = New-Object System.Drawing.Size(75,21)
$loginbutton.Location = New-Object System.Drawing.Size(115,4)
$loginbutton.add_click({login})
$loginbutton.Text = "Login"
$form.Controls.Add($loginbutton)

$drc = $form.ShowDialog()        

sdtool.ps1(sdtool.ps1很大,有许多选项卡,仅使用以下内容进行测试)
param(
[string]$a
)
Write-host $a

最佳答案

在cmdlet完成之前,脚本将不会继续。当您使用Invoke-Expression时,在下标完成之前(它也将在您的主脚本的进程中运行),它不会跳到下一个命令。

您可以将第二个脚本作为新进程启动,以便它们分别运行,然后关闭登录表单,以便第一个脚本完成并退出。

Function login {

    $sdnum = $numInputBox.text

    Start-Process "powershell.exe" -ArgumentList "-File C:\servicedesk\sdtool.ps1 -a $sdnum"

    #Close login-form so the first script will finish.
    $form.Close()

}

关于powershell - 通过invoke-expression将参数传递给第二个ps1文件后,关闭PS1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27747709/

相关文章:

powershell - 使用Invoke-Command调用脚本时在PowerShell中获取脚本目录

java - 在 JSP 中调用 Java 方法

macos - 在 AppleScript 或 PowerShell 中通过网络重新启动多台 Mac 的脚本?

powershell - 如何将时间拉到事件电源计划的 sleep 时间?

asp.net-mvc - 在 Web 应用程序中使用 Monaco 编辑器

powershell - 写输出在回调内不起作用

python - Windows 上的 virtualenv/virtualenvwrapper-win 中的环境变量

powershell调用命令不处理try-cache block

powershell - 通过Jenkins运行Powershell脚本时出现此错误: “NativeCommandError” not sure how to use invoke-command

silverlight - 在 XAML 中按下 "ENTER"键时调用命令