Точка поиска сценария PowerShell, не заканчивающегося на .ps1

Из программы PowerShell я могу «точечный источник» другой программы PowerShell. то есть я могу выполнить его, как если бы он был написан внутри первого.
Пример:

Write-Host 'before'
. MyOtherProgram.ps1
Write-Host 'after'

MyOtherProgram «включена» в основную программу, точно так же, как если бы ее содержимое было скопировано/вставлено.

Проблема в том, что я могу указать точку только в имени файла, оканчивающемся на .ps1
Я не могу на MyOtherProgram.lib или MyOtherProgram.whatever

У кого-нибудь есть способ создать сценарий PowerShell, не заканчивающийся на .ps1?


person Gregory MOUSSAT    schedule 10.05.2012    source источник


Ответы (2)


Другой способ - использовать Invoke-Expression:

$code = Get-Content ./MyOtherProgram.lib | Out-String
Invoke-Expression $code
person Shay Levy    schedule 11.05.2012
comment
Invoke-Expression не делает то же самое, что и точечный поиск. Вы не можете Invoke-Expression в библиотеке функций и иметь возможность вызывать эти функции. - person Joe B; 11.06.2020

Я не знаю, скомпилировано ли это в PowerShell или его можно настроить, но один из способов сделать это - просто временно переименовать ваш скрипт, импортировать его, а затем переименовать обратно.

Rename-Item C:\Path\MyScript.whatever C:\Path\MyScript.ps1
. C:\Path\MyScript.ps1
Rename-Item C:\Path\MyScript.ps1 C:\Path\MyScript.whatever
person Andy Arismendi    schedule 10.05.2012