Скрипт работает с ISE, но не с powershell.exe - PullRequest
0 голосов
/ 03 августа 2020

После месяцев "написания сценариев" я наконец-то заставил свой сценарий работать так, как мне нужно, за исключением того, что он делает только то, что я хочу, когда запускаю его из ISE. Когда я запускаю его с помощью powershell.exe, он вызывает что-то вроде невозможности найти [system. windows .forms. "dialogresult]".

Я приложил соответствующую часть скрипта, 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

Любая помощь, которую вы можете оказать, очень признательна.

1 Ответ

0 голосов
/ 03 августа 2020
• 1000 в consolehost.

Поместите это в начало вашего скрипта. Вот фрагмент, который я использую для функций

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

Тип открытой / закрытой скобки должен соответствовать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...