2015-01-02 2 views
2

많은 기능을 가진 GUI가 있지만 그 중 하나를 구축해야하는 것은 직원 멤버의 직원 ID 번호이므로이를 사용하여 추가 할 수 있습니다 다른 기능들. 로그인 상자를 만들어서이 작업을 수행하려고합니다. (암호는 필요 없습니다)invoke-expression을 통해 두 번째 ps1 파일에 argu를 전달한 후 PS1을 닫습니다.

첫 번째 PS1이 열리 며 입력 상자가 생기고 두 번째를 invoke-expression으로 호출하고 직원 ID 번호를 전달합니다. argu.

제 문제는 첫 번째 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 내 login.ps1입니다

을 실행하는 나를 떠나고 싶어합니다 (sdtool.ps1 훨씬 더 큰

param(
[string]$a 
) 
Write-host $a 

답변

1

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() 

} 
+0

이제 작동하지만 콘솔 창을 배경으로 열어두고 끝까지 "-WindowStyle Hidden"을 추가하려고했지만 아무 것도 열리지 않습니다. –

+0

sdtool.ps1 (subscript)의 콘솔 창을 의미합니까? GUI뿐입니까? 그렇다면 powershell.exe에 대한'-WindowStyle Hidden'이 작동해야하지만'-File'과 스크립트 인수는 마지막 인자와 인수가 될 필요가 있습니다.'Start-Process '를 시도하십시오 powershell.exe "-ArgumentList"-WindowStyle Hidden -File C : \ servicedesk \ sdtool.ps1 -a $ sdnum "' –

+1

안녕하세요 Frode F yes SDtool.ps1은 GUI이기도합니다. 바로 WindowStyle 숨김 기능이 제대로 작동하지 않았습니다. 필요에 따라 현재 실행중인 최고 점수 (내 요청이 확실한지 확인하기위한 메모) –