PowerShell - 将变量传递给Invioke-Command

时间:2015-02-06 20:14:35

标签: powershell media-queries

出于某种原因,当我尝试在下面的代码中的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

1 个答案:

答案 0 :(得分:3)

$scanpath与脚本块的范围不同。您有两种方法可以解决此问题:

PowerShell 3+ - 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的参数中。