出于某种原因,当我尝试在下面的代码中的Get-ChildItem之后使用$ scanpath变量时,它不起作用。但是,如果我将实际路径放在$ scanpath的位置,它就可以工作了。我究竟做错了什么? $ computer和$ savepath变量都可以正常工作。
$computer = 'Server'
$scanpath = 'P$\Directory\Directory\Z'
$savepath = 'C:\Z-Media.csv'
Invoke-Command -ComputerName $computer -scriptblock {Get-ChildItem $scanpath -recurse -include *.mp3,*.wma,*.wmv,*.mov,*.mpg,*.ogg,*.jpg -force | select FullName, Length | Sort-Object { [long]$_.Length } -descending} | Export-Csv $savepath -NoTypeInformation
答案 0 :(得分:3)
$scanpath
与脚本块的范围不同。您有两种方法可以解决此问题:
Using
范围修饰符Invoke-Command -ComputerName $computer -scriptblock {Get-ChildItem $Using:scanpath -recurse}
有关详细信息,请参阅about_Scopes。
使用是一个特殊的范围修饰符,用于标识本地变量 一个远程命令。默认情况下,假定远程命令中的变量 在远程会话中定义。
Invoke-Command -ComputerName $computer -scriptblock {param($thisPath) Get-ChildItem $thisPath -recurse} -ArgumentList $scanpath
您可以像函数一样提供脚本块参数。 Invoke-Command
使用-ArgumentList
参数将值传递到scriptblock的参数中。