簡體   English   中英

腳本與 ISE 一起運行,但不是 powershell.exe

[英]Script runs with ISE but not powershell.exe

經過幾個月的“腳本編寫”,我終於讓我的腳本按照我的需要工作了,除了它只在從 ISE 運行它時做我想要的。 當我使用 powershell.exe 啟動它時,它會拋出一個關於找不到 [system.windows.forms. “對話結果]”。

我附上了腳本的相關部分,TYIA

    $cred = Get-Credential
   $Job = Start-Job -ScriptBlock {
   Add-Type -AssemblyName System.Windows.Forms
   Add-Type -AssemblyName System.Drawing
   $form = New-Object System.Windows.Forms.Form
   $form.Text = 'Admin Tools’
   $form.Size = New-Object System.Drawing.Size(900,600)
   $form.StartPosition = 'CenterScreen'
   $form.AutoSize = $true
   $form.MaximizeBox = $false
   $form.FormBorderStyle = 'FixedSingle'


   $img = [System.Drawing.Image]::Fromfile("c:\users\$env:username\Pictures\logo.png")
   $pictureBox = New-Object Windows.Forms.PictureBox
   $pictureBox.Width = $img.Size.Width
   $pictureBox.Height = $img.Size.Height
   $pictureBox.Location = New-Object System.Drawing.Size(600,465)
   $pictureBox.Image = $img
   $form.controls.add($pictureBox) 

   $ADUCButton = New-Object System.Windows.Forms.Button
   $ADUCButton.Location = New-Object System.Drawing.Point(10,25)
   $ADUCButton.Size = New-Object System.Drawing.Size(300,100)
   $ADUCButton.Font = New-Object System.Drawing.Font(“Times New Roman”,14, [System.Drawing.Fontstyle]::Bold) 
   $ADUCButton.Text = ' Active Directory Users and Computers '
   $ADUCButton.Add_Click({Start-Process -filepath 'c:\windows\system32\cmd.exe' -WindowStyle maximized})
   $ADUCButton.FlatAppearance.BorderColor = [System.Drawing.Color]::DarkBlue
   $ADUCButton.BackColor = [System.Drawing.Color]::CornflowerBlue
   $form.Controls.Add($ADUCButton)

   $label = New-Object System.Windows.Forms.Label
   $label.location = New-Object System.Drawing.Point(100,500)
   $label.Size = New-Object System.Drawing.Size(280,70)
   $label.Font = New-Object System.Drawing.Font("Lucida Console",8, 
 [System.Drawing.FontStyle]::Italic)
   $label.Text = 'Created by a PowerShell Novice'
   $form.Controls.Add($label)

   $CancelButton = New-Object System.Windows.Forms.Button
   $CancelButton.Location = New-Object System.Drawing.Point(850,300)
   $CancelButton.Size = New-Object System.Drawing.Size(75,23)
   $CancelButton.Text = 'Close'
   $CancelButton.DialogResult = [System.Windows.Forms.DialogResult]::Cancel
   $form.CancelButton = $CancelButton
   $form.Controls.Add($CancelButton)



   $result = $form.ShowDialog()

   if ($result -eq [System.Windows.Forms.DialogResult]::OK)
   {
   $x = $listBox.SelectedItems
   $x
   }

   } -Credential $cred
   Recieve-Job $job

非常感謝您提供的任何幫助。

當您在 ISE 中時,它會自動加載執行許多操作所需的模塊,而 consoelhost 則不會。

如果您的腳本中有表單代碼,則必須使用所需的資源,以便它在控制台主機中正確運行。

把它放在腳本的頂部。 這是我為函數保留的片段

# Initialize GUI resources
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing
Add-Type -AssemblyName presentationframework
Add-type -AssemblyName microsoft.VisualBasic
[System.Windows.Forms.Application]::EnableVisualStyles()
Add-Type -AssemblyName System.Drawing

# Required for use with web SSL sites
[Net.ServicePointManager]::
SecurityProtocol = [Net.ServicePointManager]::
                   SecurityProtocol -bor 
                   [Net.SecurityProtocolType]::
                   Tls12

您不需要全部,這取決於您正在做什么或計划做什么。 至少,你需要這個...

Add-Type -AssemblyName System.Windows.Forms

順便說一句,這可能是一個發布錯誤,但這一行在語法上是不正確的。

if ($result -eq [System.Windows.Forms.DialogResult}::OK)

應該是這個...

if ($result -eq [System.Windows.Forms.DialogResult]::OK)

開/關括號類型必須匹配

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM