У меня есть набор сценариев PowerShell, которые содержат «общий» сценарий, расположенный в той же папке, например:
# some-script.ps1
$scriptDir = Split-Path -Parent $myinvocation.mycommand.path
. "$scriptDir\script-utils.ps1"
Это нормально, если скрипт вызывается напрямую, например,
.\some-script.ps1
Однако, если скрипт вызывается с помощью Invoke-Command, это не работает:
Invoke-Command -ComputerName server01 -FilePath "X:\some-script.ps1"
В этом случае infact, $myinvocation.mycommand
содержит содержимое скрипта, а $myinvocation.mycommand.path
равно нулю.
Как я могу определить каталог скрипта таким образом, чтобы он также работал, когда скрипт вызывается с помощью Invoke-Command?
Примечание
В конце концов, это решение, которое я на самом деле использовал:
Invoke-Command -ComputerName server01 `
{param($scriptArg); & X:\some-script.ps1 $scriptArg } `
-ArgumentList $something
Это также позволяет передавать параметры в скрипт.