PowershellでWindowsフォームを利用するスクリプト

10.18

Helpデスクの担当者やユーザーなどにスクリプトを渡して実行してもらうケースは非常に多いと思います。

弊社では可能な限り自動化を目指してメンバーの負担を減らしているのですが、メンバーのスキルレベルも様々ですし大規模現場になると非常に多数のスクリプトを作成することになりますのでバージョン管理なども複雑になります。

それらを防ぐために、自前の Support_Tools というアプリもどきを用意しております。

以下、項目名は固有名だけを外してある現場でそのまま使っているのを載せております。

実際に実行するスクリプトについては、すべて隠しておりますが、実際に使用する現場の状況に合わせてスクリプトを作成し、このSupprt_Toolsに載せておけば誰でも使えて、バージョン管理が不要となるため現場の作業が非常にスムーズになります。

# アセンブリのロード
Add-Type -AssemblyName System.Windows.Forms

# フォーム
$Form = New-Object System.Windows.Forms.Form
$Form.Size = “880,650”
$Form.startposition = “CenterScreen”
$Form.text = “Support_Tools”

# タブコントロール
$TabControl = New-Object System.Windows.Forms.TabControl
$TabControl.size = “850,550”

# タブページ1
$Tab1 = New-Object System.Windows.Forms.TabPage
$Tab1.Text = “Managment Tool”

# タブページ1の中のラベル
$label1 = New-Object System.Windows.Forms.Label
$label1.location = “10,10”
$label1.Size = “830,25”
$label1.Text = “Application will be executed by permission of user which launched the support tool.”
$Tab1.Controls.AddRange(@($Label1))

# タブ1チェックボックスを作成
$CheckedBox1 = New-Object System.Windows.Forms.CheckedListBox
$CheckedBox1.Location = “5,35”
$CheckedBox1.Size = “830,480”

# タブ1配列を作成
$RETU1 = (“NT Time conversion”,”Launch all management application”,”Launch AD_User and Computers”,”Launch Group_Policy Editor”,”Launch Registry Editor”,”Launch Powershell”,”Launch Command Prompt”,”Confirm Installed update patch (Office application related KB might not show up)”,”Disable sleep setting”,”Set sleep setting to 30 min”,”Distributing installation by logon script (Skype)”,”Connect to ExchangeOnline (Requires installation of component beforehand / Please copy paste the script to Powershell)”,”Connect to SkypeOnline (Requires installation of component beforehand / Please copy paste the script to Powershell)”)

# タブ1チェックボックスに項目を追加
$CheckedBox1.Items.AddRange($RETU1)

# すべての既存の選択をクリア
$CheckedBox1.ClearSelected()

# タブ1にチェックボックスを追加

$tab1.Controls.Add($CheckedBox1)

# タブページ2
$Tab2 = New-Object System.Windows.Forms.TabPage
$Tab2.Text = “AD / Exchange related”

# タブページ2の中のラベル
$label2 = New-Object System.Windows.Forms.Label
$label2.location = “10,10”
$label2.Size = “830,25”
$label2.Text = “Excution will require an admin rights. Error will be shown if permission is missing.”
$Tab2.Controls.AddRange(@($Label2))

# タブ2チェックボックスを作成
$CheckedBox2 = New-Object System.Windows.Forms.CheckedListBox
$CheckedBox2.Location = “5,35”
$CheckedBox2.Size = “830,480”

# タブ2配列を作成
$RETU2 = (“MailAccountFixer”,”AutoRepair_ArchiveGUID_RemoteMailBox”,”Get-Calendar_Info”,”Automatically remove the listed user from the group which they belong (Please execute on server)”,”O365_LicenseRemaining”,”Confirm the number of members in a group”,”Expand the member of the group”,”Allow POP/IMAP connection for the specified user (Please Copy Paste and execute from Powershell opened by Admin rights)”,”List all user exist on AD”,”Deactivate certificate of a disabled object (please execute on CA server)”,”Extract group member of JP-SG”,”Auto-Creation script of Shared Mail Box”,”Auto-Creation script of Meeting Room Mail Box”)

# タブ2チェックボックスに項目を追加
$CheckedBox2.Items.AddRange($RETU2)

# すべての既存の選択をクリア
$CheckedBox2.ClearSelected()

# タブ2にチェックボックスを追加

$tab2.Controls.Add($CheckedBox2)

# タブページ3
$Tab3 = New-Object System.Windows.Forms.TabPage
$Tab3.Text = “SCCM related”

# タブページ3の中のラベル
$label3 = New-Object System.Windows.Forms.Label
$label3.location = “10,10”
$label3.Size = “830,25”
$label3.Text = “Excution will require an admin rights. Error will be shown if permission is missing.”
$Tab3.Controls.AddRange(@($Label3))

# タブ3チェックボックスを作成
$CheckedBox3 = New-Object System.Windows.Forms.CheckedListBox
$CheckedBox3.Location = “5,35”
$CheckedBox3.Size = “830,480”

# タブ3配列を作成
$RETU3 = (“Update all application (for Win7)”,”Update all application (for Win10)”,”Re-run SCCM service (PC will be automatically rebooted after execution)”,”rebuild WSUS service (This will fix a WinUpdate related issue by rebuilding WSUS in case reboot does not fix the problem)”)

# タブ3チェックボックスに項目を追加
$CheckedBox3.Items.AddRange($RETU3)

# すべての既存の選択をクリア
$CheckedBox3.ClearSelected()

# タブ3にチェックボックスを追加

$tab3.Controls.Add($CheckedBox3)

# タブページ4
$Tab4 = New-Object System.Windows.Forms.TabPage
$Tab4.Text = “Registry”

# タブページ4の中のラベル
$label4 = New-Object System.Windows.Forms.Label
$label4.location = “10,10”
$label4.Size = “830,25”
$label4.Text = “This tool can safely distribute each registry”
$Tab4.Controls.AddRange(@($Label4))

# タブ4チェックボックスを作成
$CheckedBox4 = New-Object System.Windows.Forms.CheckedListBox
$CheckedBox4.Location = “5,35”
$CheckedBox4.Size = “830,480”

# タブ4配列を作成
$RETU4 = (“Configure Japanese keyboard”,”Configure English keyboard”)

# タブ4チェックボックスに項目を追加
$CheckedBox4.Items.AddRange($RETU4)

# すべての既存の選択をクリア
$CheckedBox4.ClearSelected()

# タブ4にチェックボックスを追加

$tab4.Controls.Add($CheckedBox4)

# タブページ5
$Tab5 = New-Object System.Windows.Forms.TabPage
$Tab5.Text = “Command”

# タブページ5の中のラベル
$label5 = New-Object System.Windows.Forms.Label
$label5.location = “10,10”
$label5.Size = “830,25”
$label5.Text = “Control each command from GUI”
$Tab5.Controls.AddRange(@($Label5))

# タブ5チェックボックスを作成
$CheckedBox5 = New-Object System.Windows.Forms.CheckedListBox
$CheckedBox5.Location = “5,35”
$CheckedBox5.Size = “830,480”

# タブ5配列を作成
$RETU5 = (“Investigating Skype Line”,”Confirm IP Address”,”Network connection confirmation (in many case, Server is configured to not reply)”,”Network route confirmation”,”Confirm Hostname”,”Show list of enviroment variable”,”Confirm specified PC is power on”,”confirm device manager”)

# タブ5チェックボックスに項目を追加
$CheckedBox5.Items.AddRange($RETU5)

# すべての既存の選択をクリア
$CheckedBox5.ClearSelected()

# タブ5にチェックボックスを追加

$tab5.Controls.Add($CheckedBox5)

# タブページ6
$Tab6 = New-Object System.Windows.Forms.TabPage
$Tab6.Text = “etc”

# タブページ6の中のラベル
$label6 = New-Object System.Windows.Forms.Label
$label6.location = “10,10”
$label6.Size = “830,25”
$label6.Text = “Workplace・CornerStone”
$Tab6.Controls.AddRange(@($Label6))

# タブ6チェックボックスを作成
$CheckedBox6 = New-Object System.Windows.Forms.CheckedListBox
$CheckedBox6.Location = “5,35”
$CheckedBox6.Size = “830,480”

# タブ6配列を作成
$RETU6 = (“Create WorkPlace Report”,”Automatically create WorkPlace Daily Report”,”Create E-Learning Organization Master”,”Create Distribution Group List”,”Create Store Manager List”,”Create Distribution Group”,”Create Store Manager List”)

# タブ6チェックボックスに項目を追加
$CheckedBox6.Items.AddRange($RETU6)

# すべての既存の選択をクリア
$CheckedBox6.ClearSelected()

# タブ6にチェックボックスを追加
$tab6.Controls.Add($CheckedBox6)

# タブページ7
$Tab7 = New-Object System.Windows.Forms.TabPage
$Tab7.Text = “FileServer related”

# タブページ7の中のラベル
$label7 = New-Object System.Windows.Forms.Label
$label7.location = “10,10”
$label7.Size = “830,25”
$label7.Text = “FileServer”
$Tab7.Controls.AddRange(@($Label7))

# タブ7チェックボックスを作成
$CheckedBox7 = New-Object System.Windows.Forms.CheckedListBox
$CheckedBox7.Location = “5,35”
$CheckedBox7.Size = “830,480”

# タブ7配列を作成
$RETU7 = (“Create list of Mail address from the list of Logon ID”,”Confirm the access rights of specified Folder, Expand All Group, confirm the target user, and add to the group”,”Delete Permission of Built-in User from all Folder in I Drive”,”Create a list of display name of mail address”,”Create a separate list of security group and other groups after confirming the permission of a Folder”)

# タブ7チェックボックスに項目を追加
$CheckedBox7.Items.AddRange($RETU7)

# すべての既存の選択をクリア
$CheckedBox7.ClearSelected()

# タブ6にチェックボックスを追加

$tab7.Controls.Add($CheckedBox7)

# タブコントロールに各タブページを入れる
$TabControl.Controls.AddRange(@($Tab1,$Tab2,$Tab3,$Tab4,$Tab5,$Tab6,$Tab7))

# OKボタンの設定
$OKButton = New-Object System.Windows.Forms.Button
$OKButton.Location = “15,560”
$OKButton.Size = “150,30”
$OKButton.Text = “OK”

$OKButton.DialogResult = [System.Windows.Forms.DialogResult]::OK

# キャンセルボタンの設定
$CancelButton = New-Object System.Windows.Forms.Button
$CancelButton.Location = “175,560”
$CancelButton.Size = “150,30”
$CancelButton.Text = “Cancel”
$CancelButton.DialogResult = [System.Windows.Forms.DialogResult]::Cancel

# フォームにタブコントロールを入れる
$Form.Controls.Add($TabControl)
$form.Controls.Add($OKButton)
$form.Controls.Add($CancelButton)

# キーとボタンの関係
$form.AcceptButton = $OKButton
$form.CancelButton = $CancelButton

# 最前面に表示:する
$form.Topmost = $True

# フォームを表示
$result = $Form.ShowDialog()

# 処理分岐
if ( $result -eq “OK” )
{
$AAA = @($CheckedBox1.CheckedItems)
$BBB = @($CheckedBox2.CheckedItems)
$CCC = @($CheckedBox3.CheckedItems)
$DDD = @($CheckedBox4.CheckedItems)
$EEE = @($CheckedBox5.CheckedItems)
$FFF = @($CheckedBox6.CheckedItems)
$GGG = @($CheckedBox7.CheckedItems)
}
else
{
$AAA = $null
$BBB = $null
$CCC = $null
$DDD = $null
$EEE = $null
$FFF = $null
$GGG = $null
}

if($AAA -ne $Null)
{
$AAA | Foreach-Object `
{
if($_ -eq “Launch all management application”)
{
start “C:\Windows\system32\dsa.msc”
Start-Sleep -m 1
start c:\Windows\system32\mmc.exe c:\Windows\system32\gpmc.msc
Start-Sleep -m 1
Start regedit
Start-Sleep -m 1
Start c:\Windows\system32\WindowsPowerShell\v1.0\PowerShell_ISE.exe
Start-Sleep -m 1
Start C:\Windows\system32\cmd.exe
}
if($_ -eq “NT Time conversion”)
{
Start ここに作成したスクリプトを記述
}
if($_ -eq “Launch AD_User and Computers”)
{
start “C:\Windows\system32\dsa.msc”
}
if($_ -eq “Launch Group_Policy Editor”)
{
start c:\Windows\system32\mmc.exe c:\Windows\system32\gpmc.msc
}
if($_ -eq “Launch Registry Editor”)
{
Start regedit
}
if($_ -eq “Launch Powershell”)
{
Start c:\Windows\system32\WindowsPowerShell\v1.0\PowerShell_ISE.exe
}
if($_ -eq “Launch Command Prompt”)
{
Start C:\Windows\system32\cmd.exe
}
if($_ -eq “Confirm Installed update patch (Office application related KB might not show up)”)
{
Start ここに作成したスクリプトを記述
}
if($_ -eq “Disable sleep setting”)
{
Start ここに作成したスクリプトを記述
}
if($_ -eq “Set sleep setting to 30 min”)
{
Start ここに作成したスクリプトを記述
}
if($_ -eq “Distributing installation by logon script (Skype)”)
{
Start ここに作成したスクリプトを記述
}
if($_ -eq “Connect to ExchangeOnline (Requires installation of component beforehand / Please copy paste the script to Powershell)”)
{
Start ここに作成したスクリプトを記述
}
if($_ -eq “Connect to SkypeOnline (Requires installation of component beforehand / Please copy paste the script to Powershell)”)
{
Start ここに作成したスクリプトを記述
}
}
}

if($BBB -ne $Null)
{
$BBB | Foreach-Object `
{
if($_ -eq “MailAccountFixer”)
{
Start ここに作成したスクリプトを記述
}
if($_ -eq “O365_LicenseRemaining”)
{
Start ここに作成したスクリプトを記述
}
if($_ -eq “Automatically remove the listed user from the group which they belong (Please execute on server)”)
{
Start ここに作成したスクリプトを記述
}
if($_ -eq “AutoRepair_ArchiveGUID_RemoteMailBox”)
{
Start ここに作成したスクリプトを記述
}
if($_ -eq “Confirm the number of members in a group”)
{
Start ここに作成したスクリプトを記述
}
if($_ -eq “Expand the member of the group”)
{
Start ここに作成したスクリプトを記述
}
if($_ -eq “Allow POP/IMAP connection for the specified user (Please Copy Paste and execute from Powershell opened by Admin rights)”)
{
Start ここに作成したスクリプトを記述
}
if($_ -eq “List all user exist on AD”)
{
Start ここに作成したスクリプトを記述
}
if($_ -eq “Deactivate certificate of a disabled object (please execute on CA server)”)
{
Start ここに作成したスクリプトを記述
}
if($_ -eq “Extract group member of JP-SG”)
{
Start ここに作成したスクリプトを記述
}
if($_ -eq “Auto-Creation script of Shared Mail Box”)
{
Start ここに作成したスクリプトを記述
}
if($_ -eq “Auto-Creation script of Meeting Room Mail Box”)
{
Start ここに作成したスクリプトを記述
}
if($_ -eq “Get-Calendar_Info”)
{
Start ここに作成したスクリプトを記述
}
}
}

if($CCC -ne $Null)
{
$CCC | Foreach-Object `
{
if($_ -eq “Update all application (for Win7)”)
{
Start ここに作成したスクリプトを記述
}
if($_ -eq “Update all application (for Win10)”)
{
Start ここに作成したスクリプトを記述
}
if($_ -eq “Re-run SCCM service (PC will be automatically rebooted after execution)”)
{
Start ここに作成したスクリプトを記述
}
if($_ -eq “rebuild WSUS service (This will fix a WinUpdate related issue by rebuilding WSUS in case reboot does not fix the problem)”)
{
Start ここに作成したスクリプトを記述
}
}
}

if($DDD -ne $Null)
{
$DDD | Foreach-Object `
{
if($_ -eq “Configure Japanese keyboard”)
{
Start ここに作成したスクリプトを記述
}
if($_ -eq “Configure English keyboard”)
{
Start ここに作成したスクリプトを記述
}
}
}

if($EEE -ne $Null)
{
$EEE | Foreach-Object `
{
if($_ -eq “Investigating Skype Line”)
{
Start ここに作成したスクリプトを記述
}
if($_ -eq “Confirm IP Address”)
{
Start ここに作成したスクリプトを記述
}
if($_ -eq “Network connection confirmation (in many case, Server is configured to not reply)”)
{
Start ここに作成したスクリプトを記述
}
if($_ -eq “Network route confirmation”)
{
Start ここに作成したスクリプトを記述
}
if($_ -eq “Confirm Hostname”)
{
Start ここに作成したスクリプトを記述
}
if($_ -eq “Show list of enviroment variable”)
{
Start ここに作成したスクリプトを記述
}
if($_ -eq “Confirm specified PC is power on”)
{
Start ここに作成したスクリプトを記述
}
if($_ -eq “confirm device manager”)
{
Start ここに作成したスクリプトを記述
}
}
}

if($FFF -ne $Null)
{
$FFF | Foreach-Object `
{
if($_ -eq “Create WorkPlace Report”)
{
Start ここに作成したスクリプトを記述
}
if($_ -eq “Automatically create WorkPlace Daily Report”)
{
Start ここに作成したスクリプトを記述
}
if($_ -eq “Create E-Learning Organization Master”)
{
Start ここに作成したスクリプトを記述
}
if($_ -eq “Create GU Distribution Group List”)
{
Start ここに作成したスクリプトを記述
}
if($_ -eq “Create GU Store Manager List”)
{
Start ここに作成したスクリプトを記述
}
if($_ -eq “Create UQ Distribution Group”)
{
Start ここに作成したスクリプトを記述
}
if($_ -eq “Create UQ Store Manager List”)
{
Start ここに作成したスクリプトを記述
}
}
}

if($GGG -ne $Null)
{
$GGG | Foreach-Object `
{
if($_ -eq “Create list of Mail address from the list of Logon ID”)
{
Start ここに作成したスクリプトを記述
}
if($_ -eq “Confirm the access rights of specified Folder, Expand All Group, confirm the target user, and add to the group”)
{
Start ここに作成したスクリプトを記述
}
if($_ -eq “Delete Permission of Built-in User from all Folder in I Drive”)
{
Start ここに作成したスクリプトを記述
}
if($_ -eq “Create a list of display name of mail address”)
{
Start ここに作成したスクリプトを記述
}
if($_ -eq “Create a separate list of security group and other groups after confirming the permission of a Folder”)
{
Start ここに作成したスクリプトを記述
}
}
}

$AAA = $null
$BBB = $null
$CCC = $null
$DDD = $null
$EEE = $null
$FFF = $null
$GGG = $null

関連記事

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

2018年11月
« 10月    
 1234
567891011
12131415161718
19202122232425
2627282930  
ページ上部へ戻る