2016-04-14 59 views
0

我有一些ps腳本通過PowerShell ISE env運行正常。powershell script.exe正在消失

$objForm = New-Object System.Windows.Forms.Form 
$objForm.Text = "Data Entry Form" 
$objForm.Size = New-Object System.Drawing.Size(600,400) 
$objForm.StartPosition = "CenterScreen" 
$objTextBox = New-Object System.Windows.Forms.TextBox 
$objTextBox.Location = New-Object System.Drawing.Size(50,50) 
$objTextBox.Size = New-Object System.Drawing.Size(150,20) 
$findLabel = New-Object System.Windows.Forms.Label 
$findLabel.Location = New-Object System.Drawing.Size(50,100) 
$findLabel.Size = New-Object System.Drawing.Size(300,20) 
$findLabel.Text = "Nađi:" 
$findBox = New-Object System.Windows.Forms.TextBox 
$findBox.Location = New-Object System.Drawing.Size(50,120) 
$findBox.Size = New-Object System.Drawing.Size(260,20) 
$replaceLabel = New-Object System.Windows.Forms.Label 
$replaceLabel.Location = New-Object System.Drawing.Size(50,180) 
$replaceLabel.Size = New-Object System.Drawing.Size(300,20) 
$replaceLabel.Text = "Zameni sa:" 
$replaceBox = New-Object System.Windows.Forms.TextBox 
$replaceBox.Location = New-Object System.Drawing.Size(50,200) 
$replaceBox.Size = New-Object System.Drawing.Size(260,20) 


$objForm.Controls.Add($startButton) 
$objForm.Controls.Add($findBox) 
$objForm.Controls.Add($replaceBox) 
$objForm.Controls.Add($objTextBox) 
$objForm.Controls.Add($beginScriptButton) 
$objForm.Controls.Add($findLabel) 
$objForm.Controls.Add($replaceLabel) 
$objForm.Topmost = $True 
$objForm.Add_Shown({$objForm.Activate()}) 
[void] $objForm.ShowDialog() 

$startButton = New-Object System.Windows.Forms.Button 
$startButton.Location = New-Object System.Drawing.Size(220,50) 
$startButton.Size = New-Object System.Drawing.Size(75,23) 
$startButton.Text = "Browse!" 
$startButton.Add_Click({ 
$browser = New-Object System.Windows.Forms.FolderBrowserDialog 
$browser.Location = New-Object System.Drawing.Size(60,60) 
$null = $browser.ShowDialog() 
$path = $browser.SelectedPath 
$objTextBox.Text = $path 
}) 

$beginScriptButton = New-Object System.Windows.Forms.Button 
$beginScriptButton.Location = New-Object System.Drawing.Size(350,130) 
$beginScriptButton.Size = New-Object System.Drawing.Size(350,180) 
$beginScriptButton.Text = "Begin" 
$beginScriptButton.Add_Click({ 
$a = $objTextBox.Text 
if(($a) -and ($findBox.Text) -and ($replaceBox.Text)){ 
$objWord = New-Object -comobject Word.Application 
$objWord.Visible = $false 

$list = Get-ChildItem "c:\users\stefan\test\*.*" -Include *.doc* 
foreach($item in $list){ 
$objDoc = $objWord.Documents.Open($item.FullName,$true) 

$objSelection = $objWord.Selection 
$wdFindContinue = 1 
$FindText = $findBox.Text 
$MatchCase = $false 
$MatchWholeWord = $true 
$MatchWildcards = $False 
$MatchSoundsLike = $False 
$MatchAllWordForms = $False 
$Forward = $True 
$Wrap = $wdFindContinue 
$Format = $False 
$wdReplaceNone = 0 
$ReplaceWith = $replaceBox.Text 
$wdFindContinue = 1 
$ReplaceAll = 2 

$a = $objSelection.Find.Execute($FindText,$MatchCase,$MatchWholeWord, ` 
$MatchWildcards,$MatchSoundsLike,$MatchAllWordForms,$Forward,` 
$Wrap,$Format,$ReplaceWith,$ReplaceAll) 
$objDoc.Save() 
$objDoc.Close() 
} 
$objWord.Quit() 
[System.Windows.Forms.MessageBox]::Show("Uspešno ste izvršili izmenu!") 
} 
else{ 
[System.Windows.Forms.MessageBox]::Show("Please fill in all fields.") 
} 

}) 

然後,我通過PowerGUI的編譯爲.exe文件 我運行它,首先,它會打開一個cmd和第二它消失後,我甚至不能看到,我已經建立了我的PowerShell形式通過代碼。 我試過不同的選項,通過PowerGui(我不想顯示一個cmd窗口,只是我的形式)。你知道如何將它編譯爲.exe並僅查看其背後的表單和邏輯嗎? 謝謝!

回答

1

將腳本編譯爲Powershell中的exe文件將其運行在新實例中,您需要在其中加載表單組件。嘗試添加給你的腳本的開頭:

[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing") 
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") 
+0

順便說一句 - 診斷這樣的PowerGUI的問題,請點擊「在外部PowerShell窗口中運行」按鈕 - 那麼它會拋出錯誤代碼你在那個窗口。 – Scepticalist