将字符串连接到Powershell变量名称

时间:2014-06-25 18:05:42

标签: powershell nodes

我正在使用Powershell中的树视图 - 我的每个建筑都有不同的节点。在我的代码中,我正在抓取变量,将它们连接在一起,并将其用作变量名称 - 但我的代码将变量视为字符串而不是已存在的节点的名称...所以我得到了< / p>

  

您无法在空值表达式上调用方法。

我该怎么做?这将使我免于每栋楼的每层楼的硬编码。这是我的代码的样子:

$bldg = "SG1-1" //for example
function refreshPrinterList ( $bldg )
{
$bldg1 = $bldg.substring(0,3)
$floor = $bldg.substring(4,1)
$refreshNode = -join('$TreeNode_',$bldg1,'_',$floor)
$refreshNode.gettype() //Returns System.String`
if($bldg1 -eq "SG1") {
    if($floor -eq "1") {
        $count = $refreshNode.Nodes.Count
        while($refreshNode.Nodes.Count -gt 0)
        {
            $refreshNode.Nodes.RemoveAt($count)
            $count--      
        }

2 个答案:

答案 0 :(得分:1)

-join运算符用于字符串,并尽职尽责地为您提供一个而不是您想要的TreeNode。如果你传入一个字符串($ bldg看起来像你的例子中的一个字符串),那么你可以做你想要的所有字符串操作,但是该函数中没有TreeNode对象来指定名称。因此,我们需要创建一个您的函数可以使用的TreeNode。这样的事情怎么样?

$newNodeName = -join('$TreeNode_',$bldg1,'_',$floor)
$refreshNode = New-Object System.Windows.Forms.TreeNode($newNodeName )
// do stuff with $refreshNode as it is a TreeNode object like you expect

这个$ refreshNode里面没有节点,因为我们只是把它弄清楚了。由于您希望修改现有的TreeNode对象,因此请将$ refreshNode作为参数传入,然后使用$ newNodeName修改其友好描述。

答案 1 :(得分:0)

我在Technet社交论坛上指出了正确的方向

My question on Technet

答案是使用&#39; Get-Variable&#39; 我有两个变量$ bldg1和$ floor我加入了一个字符串:

$newNodeName = -join('TreeNode_',$bldg1,'_',$floor)

然后我使用&#39; Get-Variable&#39; - 但我必须将变量名称放在parantheses中,如下所示:

$refreshNode = (Get-Variable ($newNodeName)).Value

现在,它不是返回一个字符串类型,而是返回我现有的字符串!