使用Invoke-Command调用脚本时,在PowerShell中获取脚本目录

我有一组PowerShell脚本,其中包含位于同一文件夹中的“常用”脚本,如下所示:
# some-script.ps1
$scriptDir = Split-Path -Parent $myinvocation.mycommand.path
. "$scriptDirscript-utils.ps1"
如果直接调用脚本,这很好,例如,
.some-script.ps1
但是,如果使用Invoke-Command调用脚本,则不起作用:
Invoke-Command -ComputerName server01 -FilePath "X:some-script.ps1"
在这种情况下,实际上,
$myinvocation.mycommand
包含脚本的内容,并且
$myinvocation.mycommand.path
为空。 如何使用Invoke-Command调用脚本时,如何确定脚本的目录? 注意 最后,这是我实际使用的解决方案:
Invoke-Command -ComputerName server01 `
  {param($scriptArg); & X:some-script.ps1 $scriptArg } `
  -ArgumentList $something
这也允许将参数传递给脚本。     
已邀请:
我不相信你可以在调用的脚本中。来自get-help invoke-command: -文件路径      在一台或多台远程计算机上运行指定的本地脚本。输入脚本的路径和文件名,或       将脚本路径传递给Invoke-Command。该脚本必须驻留在本地计算机上或目录中      本地计算机可以访问。使用ArgumentList参数指定脚本中的参数值。
 **When you use this parameter, Windows PowerShell converts the contents of the specified script file to a script
 block, transmits the script block to the remote computer, and runs it on the remote computer.**
使用-filepath参数使用invoke-command时,将从本地计算机上的文件中读取脚本,转换为脚本块,然后传递给远程计算机。远程计算机无法知道是否从文件中读取了该脚本块。 要让远程计算机知道原始文件路径是什么,您必须告诉它。我认为最简单的方法是编写一个函数来进行调用,并让它将文件名作为参数传递给调用的脚本。     
或者不使用文件路径..您可以传入一个脚本块,该脚本块从所有机器都可以访问的UNC路径中对脚本进行点源。但是,每台计算机都需要设置适当的executionpolicy,以便它们可以从UNC路径运行该脚本 让我说清楚,我不是说从UNC路径运行脚本就好像是远程处理,但仍然使用invoke-command或start-job在远程计算机上运行脚本块。只是为了方便起见,该脚本块将从UNC路径运行脚本。     

要回复问题请先登录注册