码迷,mamicode.com
首页 > 系统相关 > 详细

PowerShell Studio 创建可视化工具- 扫描软件1.0

时间:2016-05-27 14:57:33      阅读:479      评论:0      收藏:0      [点我收藏+]

标签:powershell studio;

最近PowerShell的QQ群里面流行用GUI界面装B,为了紧跟潮流,豆子也做了个小程序,这个小程序的可以根据操作系统和关键字,扫描域内的计算机是否安装了对应的软件。


界面如下

技术分享


技术分享


这个界面是通过PowerShell Studio 2015做的,主要使用了label,combox, textbox, datagridview,savafilediag, button几个控件。


几个关键点

1. 根据操作系统和关键字查询

function Get-Software
{
[cmdletbinding()]
param (
[parameter(mandatory = $true, position = 1)][string]$software,
[string]$computername = "*",
[string]$OS
)
Write-Verbose "Scanning Computers..."
if ($computername -ne ‘*‘)
{
$a = Get-ADComputer -Filter "operatingsystem -like ‘*$OS*‘ -and name -like ‘*$computername*‘ " -Properties operatingsystem, ipv4address | Where-Object{ $_.ipv4address -ne $null } | select -ExpandProperty name
}
else
{
$a = Get-ADComputer -Filter "operatingsystem -like ‘*$OS*‘ " -Properties operatingsystem, ipv4address | Where-Object{ $_.ipv4address -ne $null } | select -ExpandProperty name
}
$progressbaroverlay1.Maximum=100
$progressbaroverlay1.Value=20
#$MainForm.Refresh()
Write-Verbose "Scanning Software ..."
$s = Invoke-Command -ComputerName $a -erroraction SilentlyContinue -ErrorVariable disconnect{
param ([string]$name)
if ([System.IntPtr]::Size -eq 4)
{
Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | Where-Object{ $_.displayname -like "*$name*" } | Select-Object DisplayName, DisplayVersion, Publisher, InstallDate
}
else
{
Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*, HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* | Where-Object{ $_.displayname -like "*$name*" } | Select-Object DisplayName, DisplayVersion, Publisher, InstallDate
}
} -ArgumentList $software
$progressbaroverlay1.Value=80
#$MainForm.Refresh()
#Write-Verbose "Disconnected Computers"
#$disconnect.targetobject
$progressbaroverlay1.Value | Out-String|Write-Host
$s 
}


2. 把上面生成的对象绑定到datagridview 里面 注意 ConvertTo-DataTable 是通过自带的Snippet生成的(拖曳Snippet到自己的脚本块即可)

$table = ConvertTo-DataTable -InputObject $result
Load-DataGridView -DataGridView $datagridview1 -Item $table
$progressbaroverlay1.Visible = $false


3. DataGridView排序


$datagridview1_ColumnHeaderMouseClick = [System.Windows.Forms.DataGridViewCellMouseEventHandler]{
#Event Argument: $_ = [System.Windows.Forms.DataGridViewCellMouseEventArgs]
if ($datagridview1.DataSource -is [System.Data.DataTable])
{
$column = $datagridview1.Columns[$_.ColumnIndex]
$direction = [System.ComponentModel.ListSortDirection]::Ascending
if ($column.HeaderCell.SortGlyphDirection -eq ‘Descending‘)
{
$direction = [System.ComponentModel.ListSortDirection]::Descending
}
$datagridview1.Sort($datagridview1.Columns[$_.ColumnIndex], $direction)
}
}


4. 保存

Function Set-FileName($initialDirectory)
{
[System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") |Out-Null
$savefiledialog1.InitialDirectory = $initialDirectory
$savefiledialog1.Filter="All files (*.*) | *.*"
$savefiledialog1.ShowDialog() | Out-Null
$savefiledialog1.FileName
#model:Set-FileName -initialDirectory "D:\Scripts\例子"
}
$button保存_Click = {
#TODO: Place custom script here
$file = set-FileName
Write-Verbose "Print Out"
$datagridview1.Rows |
select -expand DataBoundItem |
export-csv $file -NoType
}


5.进度条

我是手动在对应的地方配置的进度比例。当然也可以根据循环自动的增加进度step。

比如快结束的时候,我设定进度为90%

$progressbaroverlay1.Value = 90


附件里整个project的源代码,感兴趣的可以下载看看。

本文出自 “麻婆豆腐” 博客,请务必保留此出处http://beanxyz.blog.51cto.com/5570417/1783800

PowerShell Studio 创建可视化工具- 扫描软件1.0

标签:powershell studio;

原文地址:http://beanxyz.blog.51cto.com/5570417/1783800

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!