docs: fix windows powershell install command - #328
Merged
Conversation
wget is a PowerShell alias for Invoke-WebRequest, which has no -O parameter. -O is an ambiguous prefix of -OutFile, -OutVariable, -OutBuffer and -OperationTimeoutSeconds, so the documented command fails instead of downloading. Closes #311
The powershell snippet dropped a bare exe into the current directory with no PATH entry, so windows users had to cd to that folder and type .\runpodctl.exe while mac and linux users got a working `runpodctl`. Use the zip, expand it to %LOCALAPPDATA%\runpodctl and add that to the user PATH, matching the install guide in the runpodctl skill. Reads the User PATH rather than $env:Path: the latter is the process PATH and includes the machine entries, so writing it back into the user variable copies the system PATH into it permanently. The -notlike guard keeps a re-run from appending a duplicate, and -UseBasicParsing avoids the 'internet explorer engine is not available' failure on fresh windows powershell 5.1 installs. Also links the canonical install guide on docs.runpod.io, which carries the same snippet.
This was referenced Aug 19, 2026
The previous commit added a line calling docs.runpod.io the canonical install guide. The history says otherwise: the broken powershell command sat on docs.runpod.io from 2024-06-08 until today, and in this README since 2024-01-28. This README sits beside install.sh, so whoever changes how installation works sees it; the docs site is a separate repo that lagged for over two years. Naming the staler source canonical is backwards, and a 'keep the two in step' note is not a mechanism.
lukepiette
reviewed
Aug 19, 2026
| Invoke-WebRequest -UseBasicParsing -Uri https://github.com/runpod/runpodctl/releases/latest/download/runpodctl-windows-amd64.zip -OutFile "$env:TEMP\runpodctl.zip" | ||
| Expand-Archive -Force -Path "$env:TEMP\runpodctl.zip" -DestinationPath $dest | ||
| $userPath = [Environment]::GetEnvironmentVariable('Path', 'User') | ||
| if ($userPath -notlike "*$dest*") { |
Contributor
There was a problem hiding this comment.
Could we compare complete PATH entries rather than using a wildcard substring? $userPath -notlike "*$dest*" treats a path such as ...\runpodctl-old as though $dest is already installed, and wildcard characters in the expanded path are interpreted as pattern syntax. A missing User PATH also produces a leading empty entry.
Splitting on ;, dropping empty entries, and using -notcontains $dest avoids all three cases:
$userPath = [Environment]::GetEnvironmentVariable('Path', 'User')
$pathEntries = @($userPath -split ';' | Where-Object { $_ })
if ($pathEntries -notcontains $dest) {
[Environment]::SetEnvironmentVariable(
'Path',
(($pathEntries + $dest) -join ';'),
'User'
)
}
lukepiette
approved these changes
Aug 19, 2026
lukepiette
left a comment
Contributor
There was a problem hiding this comment.
Approving. The PATH-entry comment is a non-blocking robustness improvement.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #311
Context
The README's Windows install snippet was copied from the Linux one:
On Linux,
wgetis a download tool and-Omeans "save as this filename."The issue
On Windows,
wgetis not that tool. PowerShell aliaseswgetto its ownInvoke-WebRequest, which has no-Oparameter. PowerShell allows abbreviated parameter names only when unambiguous, and-Omatches four (-OutFile,-OutVariable,-OutBuffer,-OperationTimeoutSeconds), so it refuses:Nothing downloads. The documented Windows install path has been broken since January 2024 (
3da74ab).A second, older problem showed up while fixing it: even when the download worked, it dropped a bare exe into the current directory with no
PATHentry. macOS and Linux users get a workingrunpodctlcommand; Windows users had tocdto that folder and type.\runpodctl.exe.The fix
Invoke-WebRequestwith the full-OutFilename. Correct on Windows PowerShell 5.1, and on PowerShell 6+ where thewgetalias no longer exists at all.%LOCALAPPDATA%\runpodctl, add that to the userPATH.runpodctlthen works from any terminal.amd64→arm64swap, and the "open a new terminal" step.One deliberate difference from the skills-repo guide
The zip-plus-PATH approach is taken from the install guide in the runpod skills repo, but the
PATHhandling here intentionally differs. That guide does:$env:Pathis the process PATH, which already contains the machine entries. Writing it back into the User variable copies the system PATH into it permanently, and appends a duplicate on every re-run. This PR reads the User PATH directly and guards with-notlike.-UseBasicParsingis defensive only:Invoke-WebRequeston Windows PowerShell 5.1 can fail with "the Internet Explorer engine is not available…" on fresh installs and Server Core. I have not reproduced that failure, and it may not apply when-OutFileis used. The switch is a no-op on PowerShell 6+, so it costs nothing either way.Verification
runpodctl-windows-amd64.zipandrunpodctl-windows-arm64.zip: each containsrunpodctl.exeat the root, so-DestinationPathand thePATHentry are correct and the documented arm64 swap works.Not verified on Windows. No Windows machine or CI runner is available, and the bug only reproduces on Windows PowerShell 5.1 where the
wgetalias exists. The above is artifact inspection and reasoning, not execution — please paste the snippet into a Windows terminal once before merging.Related PRs
Two independent groups. Nothing in one blocks anything in the other.
Group A — the Windows install command (#311)
One broken command that had been copy-pasted into three repos. Each PR fixes its own copy; any order, no dependencies.
README.md— fix the command, and install toPATHrunpodctl/overview.mdx— same fix on docs.runpod.ioreference/install.md, the third copyGroup B — secure registry passwords (#327)
Order matters. #51 documents a flag that does not exist on
mainuntil #329 merges, so it stays draft until then.--password-stdin, no-echo prompt, mutually exclusive flagsThe only thing the two groups share is that both touched the runpodctl skill, which is what prompted Group A's deletion: the skill had been keeping its own copy of install instructions the runpodctl README already owned.