通过调用表达式将 argu 传递给第二个 ps1 文件后关闭 PS1
Close PS1 after passing argu to second ps1 file via invoke-expression
我的 GUI 具有很多功能,但我需要在其中构建的一件事是使用它的员工的员工 ID 号,以便我可以添加其他功能。我试图通过创建一个登录框来做到这一点。(不需要密码)
我的第一个 PS1 打开并给出一个输入框,然后我用 invoke-expression 调用第二个,并在 argu 中传递员工 ID 号。
我的问题是第一个 PS1 文件保持打开状态,在我关闭第二个文件之前不会关闭。
我希望它在登录后关闭,让我继续运行第二个
这是我的登录.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
时,它不会跳转到下一个命令,直到下标完成(这也在你的主脚本进程中 运行s )。
您可以将第二个脚本作为一个新进程启动,以便它们 运行 分开,然后关闭登录表单,以便第一个脚本完成并退出。
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()
}
我的 GUI 具有很多功能,但我需要在其中构建的一件事是使用它的员工的员工 ID 号,以便我可以添加其他功能。我试图通过创建一个登录框来做到这一点。(不需要密码)
我的第一个 PS1 打开并给出一个输入框,然后我用 invoke-expression 调用第二个,并在 argu 中传递员工 ID 号。
我的问题是第一个 PS1 文件保持打开状态,在我关闭第二个文件之前不会关闭。 我希望它在登录后关闭,让我继续运行第二个
这是我的登录.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
时,它不会跳转到下一个命令,直到下标完成(这也在你的主脚本进程中 运行s )。
您可以将第二个脚本作为一个新进程启动,以便它们 运行 分开,然后关闭登录表单,以便第一个脚本完成并退出。
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()
}