Powershell查找远程登录用户

时间:2016-08-11 12:35:26

标签: powershell

我是Powershell的新手,并为一些同事写了这个表格。我只是希望得到一些关于如何编写的建议和指导,什么可能更好,或者它是否很好。感谢。

enter image description here

            [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()

1 个答案:

答案 0 :(得分:0)

Windows.Forms与WPF

Windows Presentation Foundation是更高级的替代方案。这很好,但有一个学习曲线。

你拥有的很多显示代码都会消失成一个XAML文件(一串XML),这意味着你可以继续使用背后的线路。

变量命名

匈牙利表示法(“obj”前缀)有点无意义。特别是考虑到你不能始终如一地应用它。

帕斯卡案或骆驼案这些日子是受欢迎的惯例。 e.g。

  • Pascal:MyVariable
  • Camel:myVariable

我有自己的,大多数人都这样做。选择你喜欢的东西并持续使用它。

功能_搜索

发现并不容易,也不可重复使用。为什么是下划线?

考虑创建一个通用函数,将此信息作为对象集合返回。您的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?"
}