news 2026/7/4 20:22:43

powershell 入门及简单应用

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
powershell 入门及简单应用

poweshell介绍

官方介绍:https://docs.microsoft.com/zh-cn/powershell/scripting/overview?view=powershell-5.1

Windows PowerShell 是一种命令行外壳程序和脚本环境,使命令行用户和脚本编写者可以利用 .NET Framework的强大功能。

.NET Framework 是管理面向 .NET Framework 的应用的运行时执行环境。 它包括公共语言运行时(提供内存管理和其他系统服务)和一个全面的类库(使程序员能利用强大可靠的代码实现所有主要领域的应用开发)。

PowerShell ISE是基于图形用户界面的应用程序, 并且是Windows PowerShell的默认编辑器。 ISE代表集成脚本环境。它是一个接口, 我们可以在其中运行命令以及编写, 测试和调试PowerShell脚本, 而无需在命令行界面中编写所有命令

启动powershell

现在的Windows系统中一般都集成了PowerShell,启动方法有如下几种:
a) 开始菜单 -> 运行(run) -> 输入”PowerShell”。启动成功后和上图一样。


b) 命令提示符(Command Prompt) -> PowerShell。启动后效果如下:

版本查询

修改脚本执行策略

windows系统默认禁止脚本运行,以管理员身份运行先放开并允许所有的script运行


程序、脚本、bat命令调用

& 'C:\Users\Admin\AppData\Local\google\Chrome\Application\chrome.exe' ./echohello.ps1 & cmd /c whoami

PowerShell帮助

PowerShell命令叫做cmdlet。所有的cmdlet命令规则都遵循动词-名词这种语法结构,如Get-Command、Get-Content等,如下Get-Command命令意思是获取包含get的所有命令集合:

获取命令帮助文档

计算命令执行时间

如果想计算一个命令执行时间,可以使用Measure-Command命令,如下:

命令的别名

PowerShell一些内置命令都有别名,方便记忆和输入,可以用Get-Alias命令查看别名

Get-Alias |Group-Object Definition |where {$_.Name -match 'get'}

对象类型、属性和方法

网络和端口测试

返回值判断

与cmdlet命令使用$?,对bat命令或者程序使用$LASTEXITCODE

PS C:\Users\lixiang> & where.exe curl C:\Windows\System32\curl.exe PS C:\Users\lixiang> $LASTEXITCODE 0 PS C:\Users\lixiang> Write-Host "HI" HI PS C:\Users\lixiang> $? True

下载与解压

## 适应于http下载,原生server 2008 及以上 速度比invoke-webrequest 快 function Download-File($file_url, $file_path) { $OSversion = [Environment]::OSVersion.Version if ($OSversion.Major -le 6) { $client = New-Object -TypeName System.Net.WebClient $client.DownloadFile($file_url, $file_path) } else { #在server2012中NET Framework 小于4.6,使用Invoke-WebRequest https://example 出现“请求被中止: 未能创建 SSL/TLS 安全通道”的解决办法 [System.Net.ServicePointManager]::SecurityProtocol=[System.Net.SecurityProtocolType]::Tls12 Invoke-WebRequest -Uri $file_url -OutFile $file_path -UseBasicParsing } if (! $?) { throw "$file_url download to $file_path error" } } Download-File $bvsshUrl $filePath function Unzip-File($file_path, $file_dir) { if (!(Test-Path $file_path)) { throw "Not exist $file_path" } if (!(Test-Path $file_dir)) { New-Item -ItemType Directory $file_dir -Force } $OSversion = [Environment]::OSVersion.Version if ($OSversion.Major -lt 10) { # 此方法在wincore2004 上无法使用,所以建议只对win10以下版本使用 $shellApp = New-Object -ComObject Shell.Application $files = $shellApp.NameSpace($file_path).Items() # 删除已存在的解压后的文件 $files|where{Remove-Item ("$file_dir/{0}*" -f $_.name ) -Force} $shellApp.NameSpace($file_dir).CopyHere($files) } else { Expand-Archive -Path $file_path -DestinationPath $file_dir -Force if (! $?) {throw "Unzip $file_path failed"} } }

文件和目录

# 文本查看 Get-Content -Path ".\Desktop\aaa.txt" # 持续查看,类似tail -f Get-Content -Path ".\Desktop\aaa.txt" -ReadCount 0 -Tail 2 -Wait # 目录创建 New-Item -Type Directory -Path ".\aa" # 目录删除 Remove-Item -Recurse -Force -Path ".\aa"

服务和进程

# 查看服务状态 Get-Service $service | Select-Object -Property Name, StartType, Status # 结束任务进程 Get-Process -ProcessName "DingTalk" |foreach { & cmd /c taskkill.exe /pid $_.Id /f}

脚本和函数传参

# 1 $args传参 foreach ($i in $args) { Write-Host "$i " -NoNewline } # 2 命令行参数绑定 param ( [string]$Name=$(throw "Parameter missing: -name Name"), [int]$Age=$(throw "Parameter missing: -age x as number"), [switch]$Man ) # 3 设置命令行参数集 使用ParameterSetName解析命令行参数,可有效的设置参数集 Param ( [CmdletBinding(DefaultParameterSetName="SetUp")] [Parameter(ParameterSetName="SetUp", Mandatory=$False)] [String]$ClientName, [Parameter(ParameterSetName="Run", Mandatory=$True)] [String]$SK, [Parameter(ParameterSetName="Run", Mandatory=$True)] [String]$AK, [Parameter(ParameterSetName="Run", Mandatory=$True)] [Parameter(ParameterSetName="SetUp", Mandatory=$True)] [String]$Params=$(Throw "Parameter Missing: -Params xxx As String.") ) 通过$PSCmdlet.ParameterSetName查看脚本运行的哪个参数集 $Sex='Woman' if ( $Man ) {$Sex='Man'} write-host ("name: {0} age: {1} sex: {2}" -f($Name, $Age, $Sex)) ################################# # 1 位置传参 function my-test($Name, $Age=24){ Write-Host ("name:{0}, age: {1}" -f($Name, $Age)) } my-test 'lixiang' 26 # 2 参数绑定 function my-test { param ( [string]$Name= "lx", [int]$Age= 24 ) Write-Host ("name:{0}, age: {1}" -f $Name, $Age) } my-test -Name "ddd" -Age 23 my-test

二进制传参

$a = @("list disk", 'list vol') $p = "C:\Windows\System32\diskpart.exe" $a | & $p

数组和字典

# array 数组 $array = New-Object -TypeName System.Collections.ArrayList $array.Insert(0, 'qaz') foreach ($i in 1..3) {$array.Add($i)} Write-Host $array # hash表 字典 $dict = New-Object -TypeName System.Collections.Hashtable $a = @('lixiang', 'xiaoming') $b = @(26, 25) for($i=0; $i -lt $($a.Count); $i++) { $dict[$a[$i]]=$b[$i] } foreach ($i in $dict.Keys) { Write-Host ("{0}: {1}" -f($i, $dict[$i])) } # 结果输出 xiaoming: 25 lixiang: 26

计算文件的hash值

# MDS值 Get-FileHash -Path .\aa.ps1 -Algorithm MD5 # SHA256值 Get-FileHash -Path .\aa.ps1 -Algorithm SHA256

其他

# windows server 支持 sconfig # 查看系统配置 msconfig # 查看当前用户 whoami # 查看系统信息 systeminfo
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/30 15:43:33

开源项目推荐:LobeChat——构建现代AI应用的理想起点

开源项目推荐:LobeChat——构建现代AI应用的理想起点 在今天,越来越多的开发者和企业开始尝试将大语言模型(LLM)融入实际业务。但一个现实问题是:即便手握强大的模型API,最终呈现给用户的界面却常常是冷冰冰…

作者头像 李华
网站建设 2026/7/4 1:48:17

如何选择EOR名义雇主服务,2025年度最值得的三款推荐榜单

在选择合适的EOR名义雇主服务时,企业需要清楚自己的需求和目标市场。EOR名义雇主服务提供商应具备丰富的市场经验,以确保能够合法合规地处理员工的薪资和福利。此外,企业还需考虑提供商在法律合规管理方面的能力,确保他们能及时适…

作者头像 李华
网站建设 2026/7/2 3:58:18

火山引擎AI大模型生态中的Qwen3-14B角色定位

火山引擎AI大模型生态中的Qwen3-14B角色定位 在企业智能化转型加速的今天,一个现实问题摆在众多技术团队面前:如何在有限的算力预算下,部署一个既足够聪明、又能稳定运行的大模型?超大规模模型虽强,但动辄上百GB显存和…

作者头像 李华
网站建设 2026/6/30 22:06:42

分组拖动排序功能全流程实现(前端Sortable.js + 后端Java批量更新)

实战!分组拖动排序功能全流程实现(前端Sortable.js 后端Java批量更新) 在后台管理系统开发中,“分组拖动排序”是高频交互需求——比如用户分组、权限分组、菜单分组等场景,产品往往要求支持通过拖拽调整分组顺序&…

作者头像 李华
网站建设 2026/6/30 18:03:10

2025年了居然还有人不知道AI能生成音乐了!这4款免费工具必藏

还有没有人不知道AI已经进化到这地步了?不用懂乐理、不用会乐器,输入几个关键词就能一键生成完整音乐!还能恶搞朋友,给他写一首专属音乐。今天就给大家分享4款免费AI写歌工具,看看有没有你感兴趣的。不用懂任何音乐知识…

作者头像 李华
网站建设 2026/7/3 11:42:10

无需高端显卡!Qwen3-8B在RTX 3060上的流畅运行方案

无需高端显卡!Qwen3-8B在RTX 3060上的流畅运行方案 你有没有试过在自己的电脑上跑一个真正的大语言模型?不是调用API,也不是等云端返回结果——而是看着本地GPU显存一点点被加载、首字生成只用不到两秒,整个对话完全离线、隐私无忧…

作者头像 李华