Powershell在脚本块中展开变量



我正试图按照这篇文章来扩展脚本块中的一个变量

我的代码尝试这样做:

$exe = "setup.exe"
invoke-command -ComputerName $j -Credential $credentials -ScriptBlock {cmd /c 'C:share[scriptblock]::Create($exe)'}

如何修复错误:

The filename, directory name, or volume label syntax is incorrect.
    + CategoryInfo          : NotSpecified: (The filename, d...x is incorrect.:String) [], RemoteException
    + FullyQualifiedErrorId : NativeCommandError
    + PSComputerName        : remote_computer

您肯定不需要为这个场景创建新的脚本块,请参阅链接文章底部Bruce的评论,了解为什么不应该这样做。

Bruce提到将参数传递到脚本块,在这种情况下效果很好:

$exe = 'setup.exe'
invoke-command -ComputerName $j -Credential $credentials -ScriptBlock { param($exe) & "C:share$exe" } -ArgumentList $exe

在PowerShell V3中,有一种更简单的方法可以通过Invoke命令传递参数:

$exe = 'setup.exe'
invoke-command -ComputerName $j -Credential $credentials -ScriptBlock { & "C:share$using:exe" }

请注意,PowerShell运行exe文件很好,通常没有理由先运行cmd。

要继续阅读本文,您需要确保利用PowerShell在字符串中扩展变量的能力,然后使用[ScriptBlock]::Create(),它需要一个字符串来创建新的ScriptBlock。您当前尝试的是在ScriptBlock中生成一个ScriptBlock,这是行不通的。它应该看起来更像这样:

$exe = 'setup.exe'
# The below line should expand the variable as needed
[String]$cmd = "cmd /c 'C:share$exe'"
# The below line creates the script block to pass in Invoke-Command
[ScriptBlock]$sb = [ScriptBlock]::Create($cmd) 
Invoke-Command -ComputerName $j -Credential $credentials -ScriptBlock $sb

相关内容

  • 没有找到相关文章

最新更新