0

我目前還在學習PowerShell,並且正在學習用於管理目的的過程。我發佈這個問題,因爲我無法找到關於這個地方的任何信息。在PowerShell中動態生成樹節點

我創建了GUI,其中列出了所有的服務器作爲樹節點的腳本。從那裏我想立即生成/填充/創建服務器的子節點(即,當單擊或選擇節點'服務器1'時,它應該如下生成子節點)。由於我們有大量的服務器,我不想在添加新屬性時更新每個服務器上的子節點。任何人都可以請告訴我如何做到這一點?如果我的描述沒有意義,我可以更多解釋。

..... Server1的 。 。 ...... BIOSInfo(我通過使用標籤來區分服務器節點及其子節點) 。 。 ...... PROCInfo

我使用SAPIEN原始形式與的powershell 3.0

這裏是示例代碼;

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" 
    } 

回答

0

得到它的工作如下;

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