Turn any script into a scheduled job in your cloud.
pdt builds, runs, and deploys scheduled jobs to AWS, Azure, Google Cloud, or Windows Task Scheduler. It gives every job the same primitives, chosen from years of deploying scheduled jobs for businesses on each cloud. No servers to run and nothing extra to install, and everything it makes lives in your own account.
- Bring your scripts - Drop in your PowerShell or Python files. pdt finds what they need and runs them.
- One command to deploy - No cloud skills needed.
pdt deployinstalls the tools it needs and opens the sign-in page for you. - Any cloud - Move a job between AWS, Azure, Google Cloud, and Windows by changing one line.
- Know the cost first - See the plan and a monthly cost estimate before anything changes.
- Know when it breaks - Health checks, logs, a dashboard, and alerts to Slack, Teams, or email.
Download and run the pdt installer.
Install uv, then pdt:
curl -LsSf https://astral.sh/uv/install.sh | sh
source $HOME/.local/bin/env
uv tool install pdt-cli
uv tool update-shell
For other ways to install, and how to update or remove pdt, see docs/install.md.
Then run:
pdt init jobs
cd jobs
pdt new hello-powershell --from powershell-hello-world
cd hello-powershell
pdt run
pdt deploy
pdt logs
- Create the job with
pdt new your-powershell-job --from powershell-hello-world - Replace
hello.ps1in theyour-powershell-jobfolder with your own.ps1script - Test the job locally with
pdt run your-powershell-job - Deploy it with
pdt deploy your-powershell-job
See every command.
A first deploy of the hello-world-example app to Azure, then a look at its run:
Run pdt examples to list them, then pdt new <name> --from <example> to copy one.
Small job that logs "Hello world." pdt init puts a copy of this in every new empty project.
PowerShell job. Finds the Microsoft 365 licenses a tenant pays for that nobody uses: paid licenses on disabled accounts, on accounts that have not signed in for 90 days (or never did), and seats bought but assigned to nobody. Each run keeps a LicenseWaste-<date>.xlsx workbook in the job's data store, with a Summary sheet of monthly and annual cost and one sheet per finding.
Looks at recent Entra ID sign-ins. Sends an email when one person signs in from two far-apart places too quickly: Dallas an hour ago, Paris now.
Settings for the lookback window, the minimum distance, and the email addresses live in the job's config.yml. The env vars it needs are listed there too, and in its env.template.
PowerShell job. Once a week it exports the Intune configuration of a tenant with the bulk export of IntuneManagement version 4, and keeps an IntuneExport-<date>.zip in the job's data store. To import, unzip it and point IntuneManagement's import at the company folder inside.
Reports active Monday users whose email address does not match the userPrincipalName of an active Entra ID user.
A PowerShell job whose one script, hello.ps1, writes "Hello, world!". It is the job the Quick Start deploys. Put your own .ps1 files in its folder in place of hello.ps1 to deploy your own PowerShell job.
PowerShell job. small CSV report with Export-Csv, and pdt keeps the file in the app's data store.
AutoIDM makes pdt. Any issues, questions, ideas, or concerns? Use any of these methods to get a hold of us:
- Discord
- Report a problem at https://github.com/AutoIDM/pdt/issues.
- How pdt works: the building blocks every job gets on each cloud, and the practices behind them
- Projects and apps: set up a project, add an app, and where pdt keeps its files
- Deploying: deploy, run, pause, and destroy a job, and run pdt from CI
- Commands: every
pdtcommand and its options - Choosing where jobs run: AWS, Azure, Google Cloud, Windows Task Scheduler, and your own Dockerfile
- Keeping files between runs: the storage folder every app gets, and state that carries from one run to the next
- The dashboard:
pdt gui, the browser view of every app's runs, logs, and files - Writing your own app: Python and PowerShell apps, and logging
- Sending email: send mail from an app over SMTP, Microsoft Graph, SES, or Resend
- More ways to install: other installs, and how to update or remove pdt