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"}
}
答案 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 ...