Powershell 通过调用表达式将argu传递给第二个PS1文件后关闭PS1

Powershell 通过调用表达式将argu传递给第二个PS1文件后关闭PS1,powershell,invoke-command,Powershell,Invoke Command,我有一个GUI,它有很多功能,但有一件事我需要内置到它中,那就是使用它的员工的员工id号,这样我就可以添加其他功能了。我试图通过创建一个登录框来实现这一点。(不需要密码) 我的第一个PS1打开并给出一个输入框,然后我用invoke表达式调用第二个,并在argu中传递员工id号 我的问题是第一个PS1文件保持打开状态,直到我关闭第二个文件才关闭。 我希望它在登录后关闭,然后让我继续运行第二个 这是我的登录名 Add-Type -AssemblyName System.Windows.Forms $

我有一个GUI,它有很多功能,但有一件事我需要内置到它中,那就是使用它的员工的员工id号,这样我就可以添加其他功能了。我试图通过创建一个登录框来实现这一点。(不需要密码)

我的第一个PS1打开并给出一个输入框,然后我用invoke表达式调用第二个,并在argu中传递员工id号

我的问题是第一个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更大,有许多选项卡,我只是使用下面的测试)


在完成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()

}

它可以工作,但现在我在后台打开了一个控制台窗口,我尝试在末尾添加“-WindowStyle Hidden”,但什么也没有打开。你是说sdtool.ps1(下标)的控制台窗口吗?这也是一个图形用户界面吗?如果是这样,powershell.exe的
-WindowStyle Hidden
应该可以工作,但是
-File
和脚本参数必须是最后一个参数和参数,因此请尝试
启动进程“powershell.exe”-ArgumentList”-WindowStyle Hidden-文件C:\servicedesk\sdtool.ps1-a$sdnum“
Hi Frode F yes sdtool.ps1也是GUI,你说得对,窗式隐藏是对的,我刚把它放错地方了。给你最高的分数,它现在正在按需要运行(给我一个注释,以确保我的请求是明确的)
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()

}