Branch | Status |
---|---|
dev |
This repository will host the PowerShell language worker implementation for Azure Functions. We'll also be using it to track work items related to PowerShell support. Please feel free to leave comments about any of the features and design patterns.
PowerShell support for Functions is based on PowerShell Core 7, Functions on Linux, and the Azure Functions runtime V4.
This project has adopted the Microsoft Open Source Code of Conduct. For more information see the Code of Conduct FAQ or contact opencode@microsoft.com with any additional questions or comments.
cd azure-functions-powershell-worker
./build.ps1
NOTE: If you're missing a dependency, you will be asked to run
./build.ps1 -Bootstrap
The PowerShell worker alone is not enough to establish the functions app, we also need the support from Azure Functions Host. You may either use a published host CLI or use the in-development host. But both of the methods require you to attach to the .NET process if you want a step-by-step debugging experience.
First, follow the instructions to install the Azure Functions Core Tools.
Then locate the azure-functions-core-tools\bin\workers\
folder.
Here are a few hints on where it could be located:
On Windows if you installed via npm
~\AppData\Roaming\npm\node_modules\azure-functions-core-tools\bin\workers\
On macOS if you installed via brew
/usr/local/Cellar/azure-functions-core-tools/<version>/workers/
Under the workers/powershell
folder, create a folder with the name 7.4
if it does not exist yet. Copy the result of the publish
directory into the workers/powershell/7.4
folder, and copy the publish/worker.config.json
file into the workers/powershell
folder:
Copy-Item -Recurse -Force ./src/bin/Debug/net8.0/publish/ "/usr/local/Cellar/azure-functions-core-tools/$(func --version)/workers/powershell/7.4"
Copy-Item -Recurse -Force ./src/bin/Debug/net8.0/publish/worker.config.json "/usr/local/Cellar/azure-functions-core-tools/$(func --version)/workers/powershell"
NOTE: if the powershell folder already exists, you should delete it or debugging won't work.
Then cd
into a Function App with PowerShell as the worker runtime
(NOTE: There's an example PowerShell Function App in the examples
folder).
Set the environment variable FUNCTIONS_WORKER_RUNTIME_VERSION
to 7.4
, or add this as an app setting to the local.settings.json
file.
Lastly, run:
func start
NOTE: If you would like to see more out of the logs, see the logging section in the Azure Functions Host repo.
A developer may also use the latest host code by cloning the git repository Azure Functions Host. Now you need to navigate to the root folder of the host project and build it through:
dotnet restore WebJobs.Script.sln
dotnet build WebJobs.Script.sln
After the build succeeded,
set the environment variable "AzureWebJobsScriptRoot"
to the root folder path (the folder which contains the host.json
)
of your test functions app.
Under the workers/powershell
folder, create a folder with the name 7.4
if it does not exist yet. Then copy the publish
directory to workers/powershell/7.4
, and the publish/worker.config.json
to workers/powershell
:
Copy-Item -Recurse -Force ./src/bin/Debug/net8.0/publish/ "<Azure Functions Host Root>/src/WebJobs.Script.WebHost/bin/Debug/net8.0/workers/powershell/7.4"
Copy-Item -Force ./src/bin/Debug/net8.0/publish/worker.config.json "<Azure Functions Host Root>/src/WebJobs.Script.WebHost/bin/Debug/net8.0/workers/powershell"
Then you can start the host by running:
dotnet ./src/WebJobs.Script.WebHost/bin/Debug/net8.0/Microsoft.Azure.WebJobs.Script.WebHost.dll
Note: Remember to remove
"AzureWebJobsScriptRoot"
environment variable after you have finished debugging, because it will also influence thefunc
CLI tool.
To package the PowerShell Language Worker as a nupkg, do the following:
cd azure-functions-powershell-worker
dotnet publish
cd package
dotnet pack
That will place a Microsoft.Azure.Functions.PowerShellWorker.*.nupkg
in:
azure-functions-powershell-worker/package/bin/Debug
It pulls the contents of the publish folder in:
azure-functions-powershell-worker/src/bin/Debug/net8.0/publish
if you specify a different Configuration or TargetFramework that will be honored.