Pao*_*sco 5 powershell invoke-command
我有一组PowerShell脚本,其中包含位于同一文件夹中的"常用"脚本,如下所示:
# some-script.ps1
$scriptDir = Split-Path -Parent $myinvocation.mycommand.path
. "$scriptDir\script-utils.ps1"
Run Code Online (Sandbox Code Playgroud)
如果直接调用脚本,这很好,例如
.\some-script.ps1
Run Code Online (Sandbox Code Playgroud)
但是,如果使用Invoke-Command调用脚本,则不起作用:
Invoke-Command -ComputerName server01 -FilePath "X:\some-script.ps1"
Run Code Online (Sandbox Code Playgroud)
在这种情况下,实际上,$myinvocation.mycommand包含脚本的内容,并且$myinvocation.mycommand.path为null.
如何使用Invoke-Command调用脚本时,如何确定脚本的目录?
注意
最后,这是我实际使用的解决方案:
Invoke-Command -ComputerName server01 `
{param($scriptArg); & X:\some-script.ps1 $scriptArg } `
-ArgumentList $something
Run Code Online (Sandbox Code Playgroud)
这也允许将参数传递给脚本.
我不相信你可以在调用的脚本中.来自get-help invoke-command:
-FilePath在一台或多台远程计算机上运行指定的本地脚本.输入脚本的路径和文件名,或将脚本路径传递给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.**
Run Code Online (Sandbox Code Playgroud)
使用-filepath参数使用invoke-command时,将从本地计算机上的文件中读取脚本,转换为脚本块,然后传递给远程计算机.远程计算机无法知道是否从文件中读取了该脚本块.
要让远程计算机知道原始文件路径是什么,您必须告诉它.我认为最简单的方法是编写一个函数来进行调用,并让它将文件名作为参数传递给调用的脚本.
| 归档时间: |
|
| 查看次数: |
4268 次 |
| 最近记录: |