mirror of
https://github.com/webinstall/webi-installers.git
synced 2026-08-19 03:56:16 +00:00
ref!: transitory rename of 'powershell' to 'pwsh'
This commit is contained in:
@@ -1,98 +0,0 @@
|
||||
---
|
||||
title: Microsoft PowerShell
|
||||
homepage: https://docs.microsoft.com/en-us/powershell/
|
||||
tagline: |
|
||||
PowerShell Core is a cross-platform (Windows, Linux, and macOS) automation and configuration tool/framework.
|
||||
---
|
||||
|
||||
To update or switch versions, run `webi pwsh@stable` (or `@v7.4`, `@beta`, etc).
|
||||
|
||||
## Cheat Sheet
|
||||
|
||||
> The core benefit of running `pwsh` on Mac or Linux is that you get a way to
|
||||
> debug Windows scripts without having to boot up Windows.
|
||||
>
|
||||
> The core benefit of running `pwsh` on Windows is that it's years ahead of
|
||||
> pre-installed version.
|
||||
|
||||
For example, if you want to create a `curl.exe | powershell` script for Windows
|
||||
(as we do), it's helpful to be able to do some level of debugging on other
|
||||
platforms.
|
||||
|
||||
## Table of Contents
|
||||
|
||||
- Files
|
||||
- ProTips
|
||||
- vim
|
||||
- lint
|
||||
- fmt
|
||||
|
||||
### Files
|
||||
|
||||
These are the files / directories that are created and/or modified with this
|
||||
install:
|
||||
|
||||
```text
|
||||
~/.config/envman/PATH.env
|
||||
~/.local/opt/pwsh/
|
||||
~/.local/share/powershell/Modules/
|
||||
~/.local/opt/pwsh/Modules/
|
||||
```
|
||||
|
||||
### ProTip: pwsh-essentials
|
||||
|
||||
Friends don't let friends PowerShell without
|
||||
[pwsh-essentials](../pwsh-essentials/):
|
||||
|
||||
- [PSScriptAnalyzer](../psscriptanalyzer/)
|
||||
- [pwsh-fmt](../pwsh-essentials/)
|
||||
- [pwsh-lint](../pwsh-essentials/)
|
||||
- [pwsh-fix](../pwsh-essentials/)
|
||||
- [pwsh-run](../pwsh-essentials/)
|
||||
|
||||
Plus, important information for anyone **Getting Started with PowerShell**:
|
||||
|
||||
- Case-Sensitivity
|
||||
- Returns vs Pipeline Streams
|
||||
- Strict, Trace, & Verbose Modes
|
||||
- The Call Operator "&"
|
||||
- curl vs curl.exe
|
||||
- Script Policies & Preferences
|
||||
|
||||
### How to Use PowerShell with Vim
|
||||
|
||||
Assuming you have [vim-ale](../vim-ale/) installed - which is included with
|
||||
[vim-essentials](../vim-essentials/) - all you need to do is install the
|
||||
`PSScriptAnalyzer` module.
|
||||
|
||||
See the "Lint & Fmt" section below.
|
||||
|
||||
### How to Use PowerShell with VSCode
|
||||
|
||||
_VS Code_ should also automatically recognize and use `PSScriptAnalyzer`.
|
||||
|
||||
### How to Lint, Fmt, & Fix ps1 Files
|
||||
|
||||
See [pwsh-essentials](../pwsh-essentials/) for more info but, in short:
|
||||
|
||||
```sh
|
||||
pwsh -Command "Install-Module -Name PSScriptAnalyzer -Scope CurrentUser -AllowClobber"
|
||||
```
|
||||
|
||||
```sh
|
||||
my_ps1='./my-file.ps1'
|
||||
pwsh -Command "Invoke-ScriptAnalyzer -Fix -ExcludeRule PSAvoidUsingWriteHost -Path '$my_ps1'"
|
||||
```
|
||||
|
||||
To fmt:
|
||||
|
||||
```sh
|
||||
my_ps1='./my-file.ps1'
|
||||
my_text="$(
|
||||
pwsh -Command "Invoke-Formatter -ScriptDefinition (Get-Content -Path '$my_ps1' -Raw)"
|
||||
)"
|
||||
printf '%s\n' "${my_text}" > "${my_ps1}"
|
||||
```
|
||||
|
||||
Note: it is _several hundred times faster_ to lint and fmt from a native
|
||||
PowerShell script than from invoking `pwsh -Command` each time.
|
||||
@@ -1,56 +0,0 @@
|
||||
#!/usr/bin/env pwsh
|
||||
|
||||
#################
|
||||
# Install pwsh #
|
||||
#################
|
||||
|
||||
# Every package should define these variables
|
||||
$pkg_cmd_name = "pwsh"
|
||||
|
||||
$pkg_dst_cmd = "$HOME\.local\opt\pwsh\${pkg_cmd_name}.exe"
|
||||
$pkg_dst_bin = "$HOME\.local\opt\pwsh"
|
||||
$pkg_dst_dir = "$HOME\.local\opt\pwsh"
|
||||
$pkg_dst = "$pkg_dst_dir"
|
||||
|
||||
$pkg_src_cmd = "$HOME\.local\opt\pwsh-v$Env:WEBI_VERSION\${pkg_cmd_name}.exe"
|
||||
$pkg_src_dir = "$HOME\.local\opt\pwsh-v$Env:WEBI_VERSION"
|
||||
$pkg_src = "$pkg_src_dir"
|
||||
|
||||
New-Item "$HOME\Downloads\webi" -ItemType Directory -Force | Out-Null
|
||||
$pkg_download = "$HOME\Downloads\webi\$Env:WEBI_PKG_FILE"
|
||||
|
||||
# Fetch archive
|
||||
Invoke-DownloadURL -URL $Env:WEBI_PKG_URL -Path $pkg_download
|
||||
|
||||
IF (!(Test-Path -Path "$pkg_src_cmd")) {
|
||||
Push-Location "$HOME\.local\tmp"
|
||||
|
||||
# Remove any leftover tmp cruft
|
||||
Remove-Item -Path "$pkg_src_dir" -Recurse -ErrorAction Ignore | Out-Null
|
||||
Remove-Item -Path "$HOME\.local\tmp\pwsh*" -Recurse -ErrorAction Ignore
|
||||
|
||||
# Unpack archive file into this temporary directory
|
||||
# Windows BSD-tar handles zip. Imagine that.
|
||||
New-Item ".\pwsh-v$Env:WEBI_VERSION" -ItemType Directory -Force | Out-Null
|
||||
Push-Location ".\pwsh-v$Env:WEBI_VERSION"
|
||||
Write-Output " Unpacking $pkg_download"
|
||||
& tar xf "$pkg_download"
|
||||
Pop-Location
|
||||
|
||||
# Settle unpacked archive into place
|
||||
# TODO if .\pwsh-v$Env:WEBI_VERSION\pwsh*\ exists,
|
||||
# then the nesting of the archive has changed
|
||||
# so move either .\pwsh-v$Env:WEBI_VERSION\pwsh*\
|
||||
# or .\pwsh-v$Env:WEBI_VERSION\ accordingly
|
||||
Move-Item -Path ".\pwsh-v$Env:WEBI_VERSION" -Destination "$pkg_src_dir"
|
||||
Write-Output " into ${TPath}${pkg_src_dir}${TReset}"
|
||||
|
||||
Pop-Location
|
||||
}
|
||||
|
||||
Write-Output " Copying ${TDim}${pkg_src}${TReset}"
|
||||
Write-Output " into ${TPath}${pkg_dst}${TReset}"
|
||||
Remove-Item -Path "$pkg_dst" -Recurse -ErrorAction Ignore | Out-Null
|
||||
Copy-Item -Path "$pkg_src" -Destination "$pkg_dst" -Recurse
|
||||
webi_path_add "$pkg_dst_bin"
|
||||
& "$pkg_dst_cmd" -V
|
||||
@@ -1,46 +0,0 @@
|
||||
#!/bin/sh
|
||||
set -e
|
||||
set -u
|
||||
|
||||
__init_powershell() {
|
||||
|
||||
pkg_cmd_name="pwsh"
|
||||
# no ./bin prefix
|
||||
pkg_src_cmd="$HOME/.local/opt/pwsh-v$WEBI_VERSION/pwsh"
|
||||
pkg_dst_cmd="$HOME/.local/opt/pwsh/pwsh"
|
||||
|
||||
pkg_get_current_version() {
|
||||
# 'pwsh --version' has output in this format:
|
||||
# PowerShell 7.0.2
|
||||
# This trims it down to just the version number:
|
||||
# 7.0.2
|
||||
pwsh --version 2> /dev/null | head -n 1 | cut -d' ' -f2
|
||||
}
|
||||
|
||||
pkg_install() {
|
||||
# mv ./* "$HOME/.local/opt/pwsh-v7.0.2"
|
||||
mkdir -p "$pkg_src"
|
||||
mv ./* "$pkg_src"
|
||||
|
||||
# symlink powershell to pwsh
|
||||
(
|
||||
cd "$pkg_src" > /dev/null
|
||||
ln -s pwsh powershell
|
||||
)
|
||||
}
|
||||
|
||||
pkg_link() {
|
||||
# rm -f "$HOME/.local/opt/pwsh"
|
||||
rm -f "$pkg_dst"
|
||||
|
||||
# ln -s "$HOME/.local/opt/pwsh-v7.0.2" "$HOME/.local/opt/pwsh"
|
||||
ln -s "$pkg_src" "$pkg_dst"
|
||||
}
|
||||
|
||||
pkg_done_message() {
|
||||
echo "Installed 'pwsh' at $pkg_dst"
|
||||
pwsh -V
|
||||
}
|
||||
}
|
||||
|
||||
__init_powershell
|
||||
@@ -1,27 +0,0 @@
|
||||
'use strict';
|
||||
|
||||
var github = require('../_common/github.js');
|
||||
var owner = 'powershell';
|
||||
var repo = 'powershell';
|
||||
|
||||
module.exports = function (request) {
|
||||
return github(request, owner, repo).then(function (all) {
|
||||
// remove checksums and .deb
|
||||
all.releases = all.releases.filter(function (rel) {
|
||||
let isPreview = rel.name.includes('-preview.');
|
||||
if (isPreview) {
|
||||
rel.channel = 'beta';
|
||||
}
|
||||
|
||||
return !/(alpine)|(fxdependent)|(\.deb)|(\.pkg)|(\.rpm)$/i.test(rel.name);
|
||||
});
|
||||
return all;
|
||||
});
|
||||
};
|
||||
|
||||
if (module === require.main) {
|
||||
module.exports(require('@root/request')).then(function (all) {
|
||||
all = require('../_webi/normalize.js')(all);
|
||||
console.info(JSON.stringify(all));
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user