PowerShell:Get-ChildItem忽略的字符串变量

时间:2013-06-10 07:35:03

标签: powershell

PowerShell脚本下面应该测量远程计算机上的文件夹大小,但显然我的$ Desktop变量值被Get-ChildItem忽略了,我得到0.00 MB。但是当我用显式字符串替换$ Desktop时,即“C:\ Users \ user1 \ Desktop”它可以正常工作,我得到了10.MB.我做错了吗?

$file1="C:\computers_users.csv"
import-csv $file1 | ForEach-Object{
  $Desktop = "C:\Users\$($_.user)\Desktop"      
  Invoke-Command -ComputerName $_.computer -ScriptBlock {
    $FldSize =(Get-ChildItem $Desktop -recurse | Measure-Object -property length -sum)
    "{0:N2}" -f ($FldSize.sum / 1MB) + " MB"}
}

2 个答案:

答案 0 :(得分:2)

试试这个:

Invoke-Command -ComputerName $_.computer -ScriptBlock {
    $FldSize =(Get-ChildItem $args[0] -recurse | Measure-Object -property length -sum)
    "{0:N2}" -f ($FldSize.sum / 1MB) + " MB"} -argumentlist $desktop

您需要使用-argumentlist传递参数,因为invoke-command会创建一个不知道调用会话变量的新PowerShell会话。

答案 1 :(得分:2)

另外,在PowerShell 3.0中,您可以使用$ using将局部变量传递给远程机器:

Invoke-Command ... -ScriptBlock { $FldSize =(Get-ChildItem $using:Desktop ...