2

下面的 PowerShell 脚本应该测量远程计算机上的文件夹大小,但显然我的 $Desktop 变量值被 Get-ChildItem 忽略了,我得到 0.00 MB。但是,当我用显式字符串(即“C:\Users\user1\Desktop”)替换 $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"}
}
4

2 回答 2

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 因为调用命令会创建一个新的 powershell 会话,而不知道调用会话变量。

于 2013-06-10T07:42:53.200 回答
2

附带说明一下,在 PowerShell 3.0 中,您可以使用 $using 将本地变量传递给远程机器:

Invoke-Command ... -ScriptBlock { $FldSize =(Get-ChildItem $using:Desktop ...
于 2013-06-10T08:04:51.743 回答