Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell-用于checkedlistbox列表的XML源代码分离和自定义描述性预览_Xml_Powershell_Match_Filenames_Checkedlistbox - Fatal编程技术网

Powershell-用于checkedlistbox列表的XML源代码分离和自定义描述性预览

Powershell-用于checkedlistbox列表的XML源代码分离和自定义描述性预览,xml,powershell,match,filenames,checkedlistbox,Xml,Powershell,Match,Filenames,Checkedlistbox,我编写了一个脚本,它读取一个配置组XML文件,为名称和描述值创建一个数组,并用名称填充checkedlistbox。选择项目后,描述文本框将相应地从散列更新。这是可行的,但并不理想 当我试图通过两种方式来增强表单时,我的表现很糟糕: 1将XML文件拆分为多个文件,但保留了一个文件包含多个配置的能力,因此可以单独和单独管理这些配置 2增强“描述”文本框,使其现在包含相应XML节点的完整内容,该节点以NodeName=Value的无节INI样式显示。如果一个节点包含多个值,我希望这些值用逗号分隔 我

我编写了一个脚本,它读取一个配置组XML文件,为名称和描述值创建一个数组,并用名称填充checkedlistbox。选择项目后,描述文本框将相应地从散列更新。这是可行的,但并不理想

当我试图通过两种方式来增强表单时,我的表现很糟糕: 1将XML文件拆分为多个文件,但保留了一个文件包含多个配置的能力,因此可以单独和单独管理这些配置 2增强“描述”文本框,使其现在包含相应XML节点的完整内容,该节点以NodeName=Value的无节INI样式显示。如果一个节点包含多个值,我希望这些值用逗号分隔

我正在进入下一阶段,您可以在更换时看到: a使用主脚本正文中的ReadConfigurationGroupsFile调用ReadCfgGroupsFile,并 b使用中的ftnUpdateConfigurationGroupDescription调用ftnUpdateCfgGroupDescription clb\u CC\u CfgGroups.Add\u selectedIndex已更改 …但我仍停留在ReadConfigurationGroups文件上,并怀疑当ftnUpdateConfigurationGroupDescription与ReadConfigurationGroups文件的解析一起使用时,我将使用ftnUpdateConfigurationGroupDescription

有人能帮忙吗

非常感谢,

肖恩

以下是脚本:

    function ReadCfgGroupsFile ()
    {
        [array] $script:CfgGroupNames = $null
        [array] $script:CfgGroupDescriptions = $null
        #[System.Windows.Forms.MessageBox]::Show("CfgGroupsFilePath=" + $CfgGroupsFilePath, $ScriptTitle)
        $FileExists = Test-Path $CfgGroupsFilePath
        if ($FileExists -eq $true) {
            $script:xmlCfgGroups.Load($CfgGroupsFilePath)  
            $xml_CfgGroups = $script:xmlCfgGroups.SelectNodes("/ConfigurationGroup/Group")
            ForEach ($CfgGroup in $xml_CfgGroups) {
                [array] $script:CfgGroupNames += $CfgGroup.Name
                [array] $script:CfgGroupDescriptions += $CfgGroup.Description
            }
        }
    }

    function BuildForm
    # Build the main graphical user interface form
    {
        # Declare objects
        $frm_BuildConfigurator = New-Object System.Windows.Forms.Form
        $btn_Cancel = New-Object System.Windows.Forms.Button
        $gb_CC_CfgGroups = New-Object Windows.Forms.GroupBox
        $clb_CC_CfgGroups = New-Object System.Windows.Forms.CheckedListBox
        $gb_CCF_Description = New-Object Windows.Forms.GroupBox
        $tb_CCF_Description = New-Object System.Windows.Forms.TextBox

        #Build the form
        $frm_BuildConfigurator.Text = "Build Configurator"
        $frm_BuildConfigurator.StartPosition = "CenterScreen"
        $frm_BuildConfigurator.Width = 380
        $frm_BuildConfigurator.Height = 360
        $frm_BuildConfigurator.FormBorderStyle = "FixedSingle"
        $frm_BuildConfigurator.ControlBox = $false
        $frm_BuildConfigurator.Controls.Add($btn_Cancel)
        #Set default button behaviour
        $frm_BuildConfigurator.KeyPreview = $True
        $frm_BuildConfigurator.Add_KeyDown({if ($_.KeyCode -eq "Enter") {$frm_BuildConfigurator.Close()}})
        $frm_BuildConfigurator.Add_KeyDown({if ($_.KeyCode -eq "Escape") {$frm_BuildConfigurator.Close()}})
        # Create the Cancel button
        $btn_Cancel.Location = New-Object System.Drawing.Size(50,305)
        $btn_Cancel.Size = New-Object System.Drawing.Size(55,23)
        $btn_Cancel.Text = "Cancel"
        $btn_Cancel.Add_Click({$frm_BuildConfigurator.Close()})
        # Create the CfgGroups form elements
        $frm_BuildConfigurator.Controls.Add($gb_CC_CfgGroups)
        $frm_BuildConfigurator.Controls.Add($gb_CCF_Description)
        # Create the CfgGroups group box
        $gb_CC_CfgGroups.DataBindings.DefaultDataSourceUpdateMode = [System.Windows.Forms.DataSourceUpdateMode]::OnValidation
        $gb_CC_CfgGroups.Location = New-Object System.Drawing.Point(10,6)
        $gb_CC_CfgGroups.Name = "gb_CC_CfgGroups"
        $gb_CC_CfgGroups.Size = New-Object System.Drawing.Size(350,132)
        $gb_CC_CfgGroups.Text = "Configuration Groups"
        $gb_CC_CfgGroups.Controls.Add($clb_CC_CfgGroups)
        $clb_CC_CfgGroups.Location = New-Object Drawing.Point 11,16
        $clb_CC_CfgGroups.Size = New-Object System.Drawing.Size(220,110)
        $clb_CC_CfgGroups.Add_SelectedIndexChanged({ftnUpdateCfgGroupDescription})
        #$clb_CC_CfgGroups.Add_SelectedIndexChanged({ftnUpdateConfigurationGroupDescription})
        ForEach ($Item in $script:CfgGroupNames) { $clb_CC_CfgGroups.Items.Add($Item) | Out-Null }
        # Create the Description group box
        $gb_CCF_Description.DataBindings.DefaultDataSourceUpdateMode = [System.Windows.Forms.DataSourceUpdateMode]::OnValidation
        $gb_CCF_Description.Location = New-Object System.Drawing.Point(10,146)
        $gb_CCF_Description.Name = "gb_CCF_Description"
        $gb_CCF_Description.Size = New-Object System.Drawing.Size(350,145)
        $gb_CCF_Description.Text = "Description"
        $gb_CCF_Description.Controls.Add($tb_CCF_Description)
        $tb_CCF_Description.Location = New-Object System.Drawing.Size(11,17)
        $tb_CCF_Description.Size = New-Object System.Drawing.Size(330,120)
        $tb_CCF_Description.TabIndex = 7
        $tb_CCF_Description.Text = ""
        $tb_CCF_Description.Multiline = $true
        #Show the Form
        $frm_BuildConfigurator.ShowDialog() | Out-Null
    }

    function ftnUpdateCfgGroupDescription()
    {
        $tb_CCF_Description.Text = $script:CfgGroupDescriptions[$clb_CC_CfgGroups.SelectedIndex]
    }

    function ReadConfigurationGroupsFiles ()
    {
        [array] $script:ConfigurationGroupsFiles = $null
        $xml_ConfigurationGroups = $null
        $filter = 'CfGrp_'
        Get-ChildItem -Path $scriptDir | Where-Object { $_.FullName -match $filter } | ForEach-Object { 
            [xml]$xml = Get-Content $_.FullName;
            $innerel += $xml.selectnodes("/*/*")
            [System.Windows.Forms.MessageBox]::Show("_.FullName=" + $_.FullName, $ScriptTitle)
        }
        foreach ($inone in $innerel) {
            $inone = $xmldoc.importnode($inone, $true)
            $rootnode.appendchild($inone)
        }
    }

    function ftnUpdateConfigurationGroupDescription ()
    {
        $tb_CCF_Description.Text = { $script:xmlConfigurationGroups.ConfigurationGroup.Group.($clb_CC_Cfg_Groups.SelectedItem) | ForEach $_ '[0]=[1]`n' }
    }

    Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Force
    [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")
    [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")

    $script:xmlCfgGroups = $null; $script:xmlCfgGroups = New-Object -TypeName XML
    $script:xmlConfigurationGroups = $null; $script:xmlConfigurationGroups = New-Object System.Xml.XmlDocument

    $ScriptPath = $MyInvocation.MyCommand.Path
    $ScriptDir = Split-Path -parent $ScriptPath
    $CfgGroupsFilePath = $ScriptDir + "\CfgGroups.xml"
    $BuildScriptStr = $MyInvocation.MyCommand.Definition #Full path  - for script name only use $MyInvocation.MyCommand.Name

    ReadCfgGroupsFile

    #ReadConfigurationGroupsFiles

    BuildForm
以下是初始的组合XML数据文件CfgGroups.XML:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <ConfigurationGroup>
        <Group Name="Group1">
            <Description>Group1 information.</Description>
            <Features>BITS</Features>
            <IPAddress>10.9.193</IPAddress>
            <SubnetMask>255.255.255.0</SubnetMask>
            <Gateway>10.9.101.1</Gateway>
            <DNS1>10.9.193.11</DNS1>
            <DNS2>10.9.193.12</DNS2>
        </Group>
        <Group Name="Group2">
            <Description>Group2 information.</Description>
            <Features>Net-Framework-Core,RDS-RD-Server,</Features>
            <IPAddress>10.251.120</IPAddress>
            <SubnetMask>255.255.255.0</SubnetMask>
            <Gateway>10.251.96.1</Gateway>
            <DNS1>10.251.120.11</DNS1>
            <DNS2>10.251.120.12</DNS2>
        </Group>
    </ConfigurationGroup>
下面是两个拆分实例,我想继续使用

CfGrp_Group1.xml

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ConfigurationGroup>
    <Group Name="Group1a">
        <Description>Group1a information.</Description>
        <Features>BITS</Features>
        <IPAddress>10.9.193</IPAddress>
        <SubnetMask>255.255.255.0</SubnetMask>
        <Gateway>10.9.101.1</Gateway>
        <DNS1>10.9.193.11</DNS1>
        <DNS2>10.9.193.12</DNS2>
    </Group>
    <Group Name="Group1b">
        <Description>Group1b information.</Description>
        <Features>Net-Framework-Core,RDS-RD-Server,</Features>
        <IPAddress>10.251.120</IPAddress>
        <SubnetMask>255.255.255.0</SubnetMask>
        <Gateway>10.251.96.1</Gateway>
        <DNS1>10.251.120.11</DNS1>
        <DNS2>10.251.120.12</DNS2>
    </Group>
</ConfigurationGroup>
和CfGrp_Group2.xml

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ConfigurationGroup>
    <Group Name="Group2">
        <Description>Group2 information.</Description>
        <Features>Net-Framework-Core,RDS-RD-Server,GPMC,Web-Server,Web-Asp-Net,Web-Net-Ext,Web-Mgmt-Console,RSAT-AD-PowerShell</Features>
        <IPAddress>10.10.254</IPAddress>
        <SubnetMask>255.255.255.0</SubnetMask>
        <Gateway>10.10.1.254</Gateway>
        <DNS1>10.10.1.2</DNS1>
        <DNS2>10.10.1.3</DNS2>
    </Group>
</ConfigurationGroup>