我是Powershell的新手,并为一些同事写了这个表格。我只是希望得到一些关于如何编写的建议和指导,什么可能更好,或者它是否很好。感谢。
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")
function _Search {
if ($UernameSearch) {Clear-Variable -Name UernameSearch}
$OutputBox1.Clear()
$TextSearch = $SearchBox1.Text
$UernameSearch = gwmi win32_computersystem -comp $TextSearch | select USername
if ($UernameSearch) {
if ($UernameSearch.USername) {$OutputBox1.Text = $UernameSearch.USername}
else {$OutputBox1.Text = "No user currently logged on."}}
else {$OutputBox1.Text = "Is $TextSearch offline?"}
$OutputBox1.Enabled = $true
}
$objForm = New-Object System.Windows.Forms.Form
$objForm.Text = "Who's Logged In"
$Icon = [system.drawing.icon]::ExtractAssociatedIcon($PSHOME + "\powershell.exe")
$objForm.Icon = $Icon
$objForm.Size = New-Object System.Drawing.Size(250,200)
$objForm.StartPosition = "CenterScreen"
$objForm.MaximizeBox = $false
$objForm.FormBorderStyle = 'Fixed3D'
$objForm.KeyPreview = $True
$objForm.Add_KeyDown({if ($_.KeyCode -eq "Escape") {$objForm.Close()}})
$objLabel = New-Object System.Windows.Forms.Label
$objLabel.Location = New-Object System.Drawing.Size(30,5)
$objLabel.AutoSize = $true
$objLabel.TextAlign = "TopCenter"
$objLabel.Text = "Use this tool to find who is currently
logged onto a remote machine."
$objForm.Controls.Add($objLabel)
$objLabe2 = New-Object System.Windows.Forms.Label
$objLabe2.Location = New-Object System.Drawing.Size(60,50)
$objLabe2.Size = New-Object System.Drawing.Size(150,15)
$objLabe2.Text = "Enter Computer Name"
$objForm.Controls.Add($objLabe2)
$SearchBox1 = New-Object System.Windows.Forms.TextBox
$SearchBox1.Location = New-Object System.Drawing.Size(15,70)
$SearchBox1.Height = 25
$SearchBox1.Width = 210
$SearchBox1.Multiline = $false
$SearchBox1.Add_KeyDown({if ($_.KeyCode -eq "Enter") {_Search}})
$objForm.Controls.Add($SearchBox1)
$SearchButton = New-Object System.Windows.Forms.Button
$SearchButton.Location = New-Object System.Drawing.Size(15,95)
$SearchButton.Height = 25
$SearchButton.Width = 210
$SearchButton.Text = "GO!"
$SearchButton.Add_Click({_Search})
$objForm.Controls.Add($SearchButton)
$OutputBox1 = New-Object System.Windows.Forms.TextBox
$OutputBox1.Location = New-Object System.Drawing.Size(15,125)
$OutputBox1.Multiline = $false
$OutputBox1.Height = 25
$OutputBox1.Width = 210
$OutputBox1.Multiline = $false
$OutputBox1.Enabled = $false
$objForm.Controls.Add($OutputBox1)
$objForm.Add_Shown({$objForm.Activate()})
[void] $objForm.ShowDialog()
答案 0 :(得分:0)
Windows.Forms与WPF
Windows Presentation Foundation是更高级的替代方案。这很好,但有一个学习曲线。
你拥有的很多显示代码都会消失成一个XAML文件(一串XML),这意味着你可以继续使用背后的线路。
变量命名
匈牙利表示法(“obj”前缀)有点无意义。特别是考虑到你不能始终如一地应用它。
帕斯卡案或骆驼案这些日子是受欢迎的惯例。 e.g。
我有自己的,大多数人都这样做。选择你喜欢的东西并持续使用它。
功能_搜索
发现并不容易,也不可重复使用。为什么是下划线?
考虑创建一个通用函数,将此信息作为对象集合返回。您的GUI可以使用该函数的输出并显示它。
<强> Assembly.LoadWithPartialName 强>
Obsolete。这充其量是暧昧的。此外,还有更简洁的PowerShell替代方案:
Add-Type -Assembly System.Windows.Forms
<强>别名强>
gwmi,select,截断的参数名称:这些名称中没有一个在生产代码中占有一席之地。
Aliaes为您节省了一些按键,当您在控制台上轻敲时,这很好。当你开发一些东西进行分享时,他们会增加默默无闻。
将来审查或更新代码的任何人都必须熟悉命令(至少是描述性的)和别名。
格式一致
Style始终是个人的,但是有一些非常流行的编写分支语句的方法,例如这个片段:
if ($UernameSearch) {
if ($UernameSearch.USername) {$OutputBox1.Text = $UernameSearch.USername}
else {$OutputBox1.Text = "No user currently logged on."}}
else {$OutputBox1.Text = "Is $TextSearch offline?"}
考虑我喜欢的风格:
if ($UsernameSearch) {
if ($UsernameSearch.Username) {
$OutputBox1.Text = $UsernameSearch.Username
} else {
$OutputBox1.Text = "No user currently logged on."
}
} else {
$OutputBox1.Text = "Is $TextSearch offline?"
}