简体   繁体   English

快速在Powershell中生成树节点

[英]Generate tree nodes in powershell on the fly

I am currently new to and in process of learning powershell for andmistrative purposes. 我目前新和学习PowerShell中的andmistrative目的的过程。 I am posting this question since I couldnt find much information regarding this anywhere. 我发布此问题是因为我在任何地方都找不到太多有关此问题的信息。

I am creating a script with a gui which lists all our servers as treenodes. 我创建一个图形用户界面,其中列出了所有的服务器作为树节点的脚本。 From there I want to generate/populate/create the child nodes of the server on the fly (ie when the node'server1' is clicked or selected , it should generate child nodes as below). 从那里,我想动态地生成/填充/创建服务器的子节点(即,当单击或选择节点“ server1”时,它应生成如下的子节点)。 Since we have large quantity of servers, I dont want to update child nodes on every server when a new property is added. 由于我们有大量的服务器,因此我不想在添加新属性时更新每个服务器上的子节点。 Can anyone please tell me how to accomplish this? 谁能告诉我如何做到这一点? If my description doesn't make sense I can explain more. 如果我的描述没有意义,我可以解释更多。

.....Server1 . ..... Server1。 . ......BIOSInfo (I am distiguishing server nodes and its child nodes by using tags) . ...... BIOSInfo(我通过使用标签来区分服务器节点及其子节点)。 . ......PROCInfo ...... PROCInfo

etc 等等

I am using sapien primal forms with powershell 3.0 我在Powershell 3.0中使用sapien基本形式

here is the sample code; 这是示例代码;

function NodeClick( $object )
{
    if ($this.SelectedNode.Tag -eq "Server")
    {
        $Server = $this.selectednode.text
        $richTextBox1.Text = "Script for $Server Information"

        #~~< TreeNode11 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        $TreeNode1111 = New-Object System.Windows.Forms.TreeNode("OS")
        $TreeNode1111.Tag = "DevInfo"
        $TreeNode1111.Text = "OS"
        #~~< TreeNode12 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        $TreeNode1222 = New-Object System.Windows.Forms.TreeNode("Domain")
        $TreeNode1222.Tag = "DevInfo"
        $TreeNode1222.Text = "Domain"
        #~~< TreeNode13 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        $TreeNode1333 = New-Object System.Windows.Forms.TreeNode("Serial")
        $TreeNode1333.Tag = "DevInfo"
        $TreeNode1333.Text = "Serial"
        #~~< TreeNode14 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        $TreeNode1444 = New-Object System.Windows.Forms.TreeNode("BIOS")
        $TreeNode1444.Tag = "DevInfo"
        $TreeNode1444.Text = "BIOS"
        #~~< TreeNode15 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        $TreeNode1555 = New-Object System.Windows.Forms.TreeNode("Processor")
        $TreeNode1555.Tag = "DevInfo"
        $TreeNode1555.Text = "Processor"
        #~~< TreeNode16 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        $TreeNode1666 = New-Object System.Windows.Forms.TreeNode("Memory")
        $TreeNode1666.Tag = "DevInfo"
        $TreeNode1666.Text = "Memory"
        #~~< TreeNode17 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        $TreeNode1777 = New-Object System.Windows.Forms.TreeNode("Partitions")
        $TreeNode1777.Tag = "DevInfo"
        $TreeNode1777.Text = "Partitions"
        #~~< TreeNode18 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        $TreeNode1888 = New-Object System.Windows.Forms.TreeNode("Drive")
        $TreeNode1888.Tag = "DevInfo"
        $TreeNode1888.Text = "Drive"
        #~~< TreeNode19 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        $TreeNode1999 = New-Object System.Windows.Forms.TreeNode("IPInfo")
        $TreeNode1999.Tag = "DevInfo"
        $TreeNode1999.Text = "IPInfo"
        #~~< TreeNode110 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        $TreeNode2111 = New-Object System.Windows.Forms.TreeNode("PrintInfo")
        $TreeNode2111.Tag = "DevInfo"
        $TreeNode2111.Text = "PrintInfo"
        #~~< TreeNode111 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        $TreeNode2222 = New-Object System.Windows.Forms.TreeNode("FolderShare")
        $TreeNode2222.Tag = "DevInfo"
        $TreeNode2222.Text = "FolderShare"
        #~~< TreeNode112 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        $TreeNode2333 = New-Object System.Windows.Forms.TreeNode("Tasks")
        $TreeNode2333.Tag = "DevInfo"
        $TreeNode2333.Text = "Tasks"
        #~~< TreeNode113 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        $TreeNode2444 = New-Object System.Windows.Forms.TreeNode("Services")
        $TreeNode2444.Tag = "DevInfo"
        $TreeNode2444.Text = "Services"
        #~~< TreeNode114 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        $TreeNode2555 = New-Object System.Windows.Forms.TreeNode("Software")
        $TreeNode2555.Tag = "DevInfo"
        $TreeNode2555.Text = "Software"
        $this.SelectedNode = New-Object System.Windows.Forms.TreeNode("DOCACT01", [System.Windows.Forms.TreeNode[]] ( @($TreeNode1111, $TreeNode1222, $TreeNode1333, $TreeNode1444, $TreeNode1555, $TreeNode1666, $TreeNode1777, $TreeNode1888, $TreeNode1999, $TreeNode2111, $TreeNode2222, $TreeNode2333, $TreeNode2444, $TreeNode2555) ))
        $this.SelectedNode.Tag = "Server"
        $this.SelectedNode.Text = "$Server"

        $form1.refresh()
    }
    else
    {
        $this.SelectedNode.expand()
        $richTextBox1.Text = "Script for Server Information" 
    }

Got it working as following; 它按以下方式工作:

function NodeClick( $object )
{
if (($this.SelectedNode.Tag -eq "Server") -and ($this.SelectedNode.nodes.count -eq 0))
{           
    $Parent = $this.SelectedNode
    $richTextBox1.text = "Server Inventory Script"
    $Server = $Parent.text
    $Childs = ("OS", "Domain", "Serial", "BIOS", "Processor", "Memory", "Partitions", "Drive", "IPInfo", "PrintInfo", "FolderShare", "Tasks", "Services", "Software")
    $childs | %{
        $newNode = New-Object System.Windows.Forms.TreeNode             
        $newNode.Name = $_          
        $newNode.Text = $_              
        $newNode.Tag = "DevInfo"                
        $Parent.Nodes.Add($newNode) | Out-Null              
        return $newNode
        $Form1.refresh()
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 自动生成对powershell命令的响应? - Automatically generate a response to a powershell command? 在 Azure AKS 节点上运行 PowerShell 脚本, - Run a PowerShell script on Azure AKS nodes, Powershell 在 windows 和 unix 中正确生成文件路径 - Powershell to generate file paths correctly in windows and unix 即时从* nix Web服务器生成基于Windows的自定义EXE安装程序(OpenVPN客户端自定义安装程序) - Generate custom Windows-based EXE installer from *nix webserver on the fly (OpenVPN client custom installer) 从 Powershell 中的 VERY LARGE XML 文件中删除节点 - Deleting nodes from VERY LARGE XML file in Powershell 通过 SMTP 通过 powershell 从目录发送树 - Send tree from a directory via SMTP through powershell 从一个巨大的 3GB XML 文件中删除大约 60,000 个 XML 节点 - Powershell - Remove approx 60,000 XML nodes from a huge 3GB XML file - Powershell 如何使用 Beta Windows 容器/节点在 Google Kubernetes Engine 上启动休眠的 powershell? - How to start a sleeping powershell on Google Kubernetes Engine with Beta Windows containers/nodes? 使用Windows PowerShell中的Node,我可以生成二进制输出到stdout吗? - Using Node from Windows PowerShell, can I generate binary output to stdout? C# 属性:即时更改字体和颜色 - C# Properties: Font and Color Change on the Fly
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM