PowerShell - 将变量传递给 Invioke 命令
PowerShell - Passing a variable to an Invioke-Command
出于某种原因,当我尝试在下面的代码中的 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
$scanpath
与脚本块不在同一范围内。您有 2 种方法可以解决此问题:
PowerShell 3+ - Using
作用域修饰符
Invoke-Command -ComputerName $computer -scriptblock {Get-ChildItem $Using:scanpath -recurse}
有关详细信息,请参阅 about_Scopes。
Using is a special scope modifier that identifies a local variable in
a remote command. By default, variables in remote commands are assumed
to be defined in the remote session.
任何版本 - 参数
Invoke-Command -ComputerName $computer -scriptblock {param($thisPath) Get-ChildItem $thisPath -recurse} -ArgumentList $scanpath
您可以给脚本块参数,就像函数一样。 Invoke-Command
采用 -ArgumentList
参数,将值传递到脚本块的参数中。
出于某种原因,当我尝试在下面的代码中的 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
$scanpath
与脚本块不在同一范围内。您有 2 种方法可以解决此问题:
PowerShell 3+ - Using
作用域修饰符
Invoke-Command -ComputerName $computer -scriptblock {Get-ChildItem $Using:scanpath -recurse}
有关详细信息,请参阅 about_Scopes。
Using is a special scope modifier that identifies a local variable in a remote command. By default, variables in remote commands are assumed to be defined in the remote session.
任何版本 - 参数
Invoke-Command -ComputerName $computer -scriptblock {param($thisPath) Get-ChildItem $thisPath -recurse} -ArgumentList $scanpath
您可以给脚本块参数,就像函数一样。 Invoke-Command
采用 -ArgumentList
参数,将值传递到脚本块的参数中。