跳转至

Powershell

导言

Windows Terminal 里使用, 有些踩坑经验1

Install powershell in D driver

如果你需要将PowerShell 7.x(注意:win的安装包在show more里)与其他版本并排运行,请使用ZIP安装方法将其他版本安装到不同的文件夹。

PS C:\Users\94364> $psversiontable

Name                           Value
----                           -----
PSVersion                      5.1.19041.4780

Bashrc-like 配置文件

存放路径与文件

E:/PowerShell via  v14.17.3 via 🐍 v3.9.7
 echo $PSHOME
E:\commonSoftware\PowerShell7

E:/PowerShell via  v14.17.3 via 🐍 v3.9.7
 echo $PROFILE
D:\Documents\PowerShell\Microsoft.PowerShell_profile.ps1

常见的设置

%HOMEPATH%\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
$env:DISPLAY="localhost:0.0"
Import-Module PSColor
Import-Module DirColors
Import-Module posh-git # 引入 posh-git
Import-Module oh-my-posh # 引入 oh-my-posh

#Set-Theme Paradox  设置主题为 Paradox

Set-PSReadLineOption -PredictionSource History # 设置预测文本来源为历史记录

Set-PSReadlineKeyHandler -Key Tab -Function Complete # 设置 Tab 键补全
Set-PSReadLineKeyHandler -Key "Ctrl+d" -Function MenuComplete # 设置 Ctrl+d 为菜单补全和 Intellisense
Set-PSReadLineKeyHandler -Key "Ctrl+z" -Function Undo # 设置 Ctrl+z 为撤销
Set-PSReadLineKeyHandler -Key UpArrow -Function HistorySearchBackward # 设置向上键为后向搜索历史记录
Set-PSReadLineKeyHandler -Key DownArrow -Function HistorySearchForward # 设置向下键为前向搜索历史纪录
Set-PSReadLineOption -Colors @{ InlinePrediction =  '#DF6C75'}

Invoke-Expression (&starship init powershell)
function Pro {notepad $PROFILE}
function Get-CmdletAlias ($cmdletname) {
  Get-Alias |
    Where-Object -FilterScript {$_.Definition -like "$cmdletname"} |
      Format-Table -Property Definition, Name -AutoSize
}
$env:TEMP="E:\Temp"
$env:TMP="E:\Temp"
$env:GIT_CURL_VERBOSE = 1
$env:GIT_TRACE = 1
Write-Host "Hi Mike, welcome back!"
$HOMEDRIVE = "D:"
$HOMEPATH = "\PowerShell"
Remove-Variable -Force HOME
#Set-Variable HOME "E:\PowerShell"
# Set and force overwrite of the $HOME variable
Set-Variable HOME "$HOMEDRIVE$HOMEPATH" -Force

# Set the "~" shortcut value for the FileSystem provider
(get-psprovider 'FileSystem').Home = $HOMEDRIVE + $HOMEPATH
Set-location E:\PowerShell

Function Format-FileSize() {
    Param ([int64]$size)
    If     ($size -gt 1TB) {[string]::Format("{0:0.00} TB", $size / 1TB)}
    ElseIf ($size -gt 1GB) {[string]::Format("{0:0.00} GB", $size / 1GB)}
    ElseIf ($size -gt 1MB) {[string]::Format("{0:0.00} MB", $size / 1MB)}
    ElseIf ($size -gt 1KB) {[string]::Format("{0:0.00} kB", $size / 1KB)}
    ElseIf ($size -gt 0)   {[string]::Format("{0:0.00} B", $size)}
    Else                   {""}
}
. : 无法加载文件 C:\Users\94364\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1,因为在此系统上禁止运行脚本。
. : 无法加载文件 C:\Users\94364\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1,因为在此系统上禁止运行脚
本。有关详细信息,请参阅 https:/go.microsoft.com/fwlink/?LinkID=135170 中的 about_Execution_Policies。
所在位置 行:1 字符: 3
+ . 'C:\Users\94364\Documents\WindowsPowerShell\Microsoft.PowerShell_pr ...
+   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : SecurityError: (:) [],PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess

权限问题

环境变量

  • 查看:运行dir env:显示
  • 修改:$env:TMP="D:\Temp"

Proxy

$env:http_proxy = "http://127.0.0.1:7890"
$env:https_proxy = "http://127.0.0.1:7890"

PATH

echo $env:PATH| tr ";" "\n"| sort

ssh

Win32-OpenSSH they go to %USERPROFILE%\.ssh. That typically is: C:\Users\username\.ssh

ssh -v xxx@xxx
ls ~/.ssh
echo $HOME

常用命令

Kill Process by CLI

垃圾,Windows管理器,打开直接卡住了。还不如直接命令行

systeminformer 超级好用

systeminformer

killProcess.ps1
# 获取用户输入的匹配关键字
$keyword = Read-Host "请输入要匹配的关键字"

# 显示所有匹配该关键字的进程
$processes = Get-Process | Where-Object { $_.ProcessName -like "*$keyword*" }
$processes

# 检查是否有匹配的进程
if ($processes.Count -eq 0) {
    Write-Host "没有找到匹配的进程"
    exit
}

# 询问用户是否杀掉这些进程
$response = Read-Host "是否结束这些进程? (y/n)"

# 根据用户回答处理进程
if ($response -eq 'y') {
    $processes | Stop-Process
    Write-Host "进程已结束"
} else {
    Write-Host "操作已取消"
}

Linux vs Windows Commands

Windows VS linux2

参考文献