2015-10-19 102 views
0

为什么$ servername变量会在下面的$servername中正确扩展,但不会在以下Get-Process -ComputerName $servername行中正确扩展?PowerShell变量不会在Get-Process命令中扩展

1)如果我手动将$servername="example-server"设置为循环内该列表中的示例服务器(复制/粘贴),它将起作用。 2)如果我在循环中插入行$servername | Measure-Object -Character以尝试测试变量内容是否正确(隐藏空间或某物),我没有得到任何输出。但是,如果我手动分配$servername并运行,它会在字符串中显示正确的字符数。

$servers = Import-CSV C:\temp\AllServers.csv 
foreach ($servername in $servers) 
    { 
    $servername 
    Get-Process -ComputerName $servername | Where-Object {$_.Handles -gt 1000} | Sort-Object Handles -Descending 
    } 

是否有一些处理或格式需要与csv分配的数组,我失踪?

AllServers.csv的内容是一列,第一行是列标题servers

+1

'获取进程-ComputerName $ servername.servers' – PetSerAl

+0

@PetSerAl啊,错过了,我的道歉。 –

+1

由于@PetSerAl表明问题在于你的$ servername变量不是一个字符串,而是一个csv行对象。您需要在通话中使用正确的字段。另外-ComputerName可以直接接受一串字符串。 –

回答

0

以上@PetSerAl和@Etan Reisner的评论是正确的......我需要调用行中确切的字段对象:在这种情况下,该工作方式为$servername.server

$servers = Import-CSV C:\temp\AllServers.csv 
foreach ($servername in $servers) 
    { 
    $servername.server 
    Get-Process -ComputerName $servername.server | Where-Object {$_.Handles -gt 1000} | Sort-Object Handles -Descending 
    }