一些 powershell 脚本 | 其二
2020年8月31日 · 468 字 · 1 分钟 · Powershell
承接前文,这里是另一些可能有点用的 pwsh 脚本。
命令行代理
让命令行应用走代理,用法是 socks app command
。也可以把 Set-CliProxy
与 Clear-CliProxy
单独拿出来用。
function socks {
$Command = "$args"
Set-CliProxy
Invoke-Expression $Command 2>&1 | out-default
Clear-CliProxy
}
function Set-CliProxy {
$proxy = 'http://127.0.0.1:43333'
$env:HTTP_PROXY = $proxy
$env:HTTPS_PROXY = $proxy
}
function Clear-CliProxy {
Remove-Item env:HTTP_PROXY
Remove-Item env:HTTPS_PROXY
}
time
为命令行应用计时,大概类似于 *nix 中的 time
。用法是 time app command
。
仅仅计时的话可以用 Measure-Command
命令,但它没有输出,只有时间信息,所以写了个 function 封装一下。
function time {
$Command = "$args"
$time = Measure-Command { Invoke-Expression $Command 2>&1 | out-default }
$info = "{0:d2}:{1:d2}:{2:d2}.{3}" -f $time.Hours, $time.Minutes, $time.Seconds, $time.Milliseconds
Write-Output $info
}
Get-Size
命令行里查看文件夹、文件的大小,按 M 显示。用法是 Get-Size folder/file
。
function Get-Size {
param([string]$pth)
"{0:n2}" -f ((Get-ChildItem -path $pth -recurse | measure-object -property length -sum).sum / 1mb) + " M"
}
翻译
命令行里的翻译程序,其实之前是想用 go 写一个的,但不如直接写个 pwsh 脚本简便。由于 api key 是扒的别人的,所以就在源码里删去了。
function fy {
if ($args.Length -eq 0 ) {
Write-Output 'this is a cli translator, try `fy hello world`.'
}
else {
$query = ""
for ($i = 0; $i -lt $args.Count; $i++) {
$query += " "
$query += $args[$i]
}
$ApiUrl = "redacted"
$info = (Invoke-WebRequest $ApiUrl).Content | ConvertFrom-Json
Write-Host "@" $query "[" $info.basic.phonetic "]"
Write-Host "翻译:`t" $info.translation
Write-Host "词典:"
for ($i = 0; $i -lt $info.basic.explains.Count; $i++) {
Write-Host "`t" $info.basic.explains[$i]
}
Write-Host "网络:"
for ($i = 0; $i -lt $info.web.Count; $i++) {
Write-Host "`t" $info.web[$i].key ": " -NoNewline
for ($j = 0; $j -lt $info.web[$i].value.Count; $j++) {
Write-Host $info.web[$i].value[$j] "; " -NoNewline
}
Write-Host ""
}
}
}