如何让远程执行的脚本知道它自己的位置?我正在使用 Invoke-Command 在远程服务器上运行脚本。该脚本需要在它所在的目录中创建文件。使用相对寻址运行不起作用(即 .\output.log),脚本通常最终出现在远程服务器上的我的用户配置文件中。我尝试了 this question 中概述的所有方法但当脚本远程时,它们似乎都不起作用。
更新:为每个请求提供脚本调用代码
$server='ad1hfdahp802' $remotepath='\\ad1hfdahp802\d$\AHP\pi_exceed_presentation\pi_exceed_presentation_deploy.ps1' $SDFEnvironment='INT' Invoke-Command -ComputerName $server -FilePath $remotepath -ArgumentList($SDFEnvironment,$remotepath)
远程脚本采用 $remotepath 并将其转换为文件系统路径。
最佳答案
将 -FilePath
与 Invoke-Command
结合使用意味着您在本地读取脚本并将内容作为脚本 block 发送到远程计算机。 $PSScriptRoot
仅当脚本直接在目标上执行时才有效。您可以尝试使用:
Invoke-Command - ComputerName "computer1" -Scriptblock { & '\\server\path\to\script.ps1' } -Authentication Credssp
请注意,您需要 CredSSP 才能完成此操作,因为如果没有它,远程计算机将无法使用您的凭据访问网络资源。作为替代方案,您可以使用 psexec
(或远程启动进程)。例如。
psexec \\computer1 powershell -noprofile -file \\server\path\to\script.ps1
关于powershell - 远程执行脚本的脚本位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35417304/