[英]Powershell Use Invoke-Command Session to Get-Childitem sizes on a remote computer
[英]Powershell using Invoke-Command and Get-Childitem not delivering content
:为了获得无文件夹中列出的文件的数量;我使用PowerShell 4.0的远程计算机上(rem_comp)来访问另一个(PowerShell 2.0中在此安装loc_comp)
$var1 = 'H:\scripts'
Invoke-Command -Computername loc_comp -scriptblock {(Get-Childitem $var1 -recurse | Where-Object {!$_.PSIsContainer}).count}
但是,在-scriptblock中使用$var1
时,它不会传递任何内容(也不显示任何错误消息)。
使用时
$var1 = 'H:\scripts'
Invoke-Command -Computername loc_comp -scriptblock {(Get-Childitem $ -recurse | Where-Object {!$_.PSIsContainer}).count}
有用!
注意:将var1
从'更改为“并没有帮助。
在本地运行而不使用Invoke-Command
的命令会Invoke-Command
相同的问题。
如何解决这个问题?
当您使用Invoke-command和script-block时,scriptblock无法从外部范围(作用域规则)访问您的参数。
但是,您可以定义参数并将其与-Argumentlist一起传递
例:
Invoke-Command -ComputerName "localhost" {param($Param1=$False, $Param2=$False) Write-host "$param1 $param2" } -ArgumentList $False,$True
以下示例适用于您的示例:
Invoke-Command -Computername loc_comp -scriptblock {param($var1)(Get-Childitem $var1 -recurse | Where-Object {!$_.PSIsContainer}).count} -ArgumentList $var1
为了补充CmdrTchort的有用答案 :
PS v3引入了特殊的using:
scope ,它允许在发送到远程计算机的脚本块中直接使用局部变量 (例如$using:var1
)。
这应该为你工作,因为你正在运行的机器Invoke-Command
上有V4。
$var1 = 'H:\scripts'
Invoke-Command -Computername loc_comp -scriptblock `
{ (Get-Childitem $using:var1 -recurse | Where-Object {!$_.PSIsContainer}).count }
请注意,仅当Invoke-Command
实际上以远程计算机为目标时, using:
Invoke-Command
using:
才有效。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.