Powershell在ScriptBlock中传递参数

时间:2015-05-29 19:05:31

标签: powershell invoke-command scriptblock

我试图从远程服务器获取文件的最后写入时间。

这不起作用:

$server = "MyServerName"

$lastWrite = Invoke-Command -Computername $server -ScriptBlock {Get-ChildItem "\\$args[0]\hot.war" } -argumentlist $server | select -Property LastWriteTime

这确实有效:

 $lastWrite = Invoke-Command -Computername $server -ScriptBlock {Get-ChildItem "\\MyServerName\hot.war" } -argumentlist $server | select -Property LastWriteTime

任何人都可以帮助制作第一套作品吗?

3 个答案:

答案 0 :(得分:2)

请注意字符串中的变量:"\\$args[0]\hot.war"将扩展为\\MyServerName[0]\hot.war

使用"\\$($args[0])\hot.war"确保将$args[0]视为单个表达式。

请参阅:http://blogs.msdn.com/b/powershell/archive/2006/07/15/variable-expansion-in-strings-and-herestrings.aspx

答案 1 :(得分:1)

另一种方法,如果您使用的是PowerShell 3.您可以执行以下操作:

$lastWrite = Invoke-Command -Computername $server -ScriptBlock {
               Get-ChildItem "\\$using:server\hot.war"
             } | select -Property LastWriteTime

答案 2 :(得分:0)

您需要将服务器变量添加到第一行...

$server = "MyServerName"

$lastWrite = Invoke-Command -Computername $server -ScriptBlock {Get-ChildItem "\\$server\hot.war" } -argumentlist $server | select -Property LastWriteTime