博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PowerShell Studio 创建可视化工具- 扫描软件1.0
阅读量:6251 次
发布时间:2019-06-22

本文共 3181 字,大约阅读时间需要 10 分钟。

最近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 $resultLoad-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]::Ascendingif ($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-FileNameWrite-Verbose "Print Out"$datagridview1.Rows |select -expand DataBoundItem |export-csv $file -NoType}

5.进度条

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

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

$progressbaroverlay1.Value = 90

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

转载地址:http://jousa.baihongyu.com/

你可能感兴趣的文章
【转】各种排序算法时间复杂度和空间复杂度表
查看>>
Redis客户端集群
查看>>
EF异常:WebForm、Console、Winform层不引入EF报错
查看>>
System系统类常用方法
查看>>
15:开发Rsync服务启动脚本案例
查看>>
uva 1592(NEERC 2009 STL)
查看>>
Xqk.Data数据框架使用说明之:使用Xqk.Data的一般步骤
查看>>
makefile
查看>>
C#数据类型
查看>>
HDU_3172_带权并查集
查看>>
Ryubook_1_switch_hub_源码
查看>>
Java几种路径的获取
查看>>
痞子衡嵌入式:ARM Cortex-M文件那些事(4)- 可重定向文件(.o/.a)
查看>>
centos7 源码安装nginx
查看>>
php 下载word 含图片
查看>>
栈的顺序存储实现
查看>>
编年史:OI算法总结
查看>>
IOS Exception 1(RangeText="[SKTexture]()")
查看>>
IOCP基础封装
查看>>
kendo column chart
查看>>