Powershell 在 ScriptBlock 中传递参数

Powershell passing arguments in 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

任何人都可以帮助完成第一个集合吗?

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

$server = "MyServerName"

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

另一种方式,如果您使用的是 PowerShell 3。您可以这样做:

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

注意字符串中的变量:"\$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