下面的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"}
}

最佳答案

试试这个:

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命令会创建一个新的Powershell session ,而该 session 不知道调用 session 变量。

关于powershell - PowerShell:Get-ChildItem忽略的字符串变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17018920/

10-11 07:10