当前位置: 首页 > news >正文

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
http://www.cnnetsun.cn/news/67129.html

相关文章:

  • 重构开发链路:低代码如何成为企业数智化转型的关键抓手
  • 使用PyTorch训练微调Qwen3-14B的入门级教程
  • 从代码看BuildingAI:企业级智能体平台设计解析
  • 负责处理大数据量的Excel导出功能
  • JMeter---正则表达式提取器
  • 如何利用diskinfo下载官网资源优化Qwen3-VL-8B存储性能
  • 量子电导式氢气浓度检测仪在制氢系统中的优势
  • 牛了个牛,做好功能测试就靠“它”
  • AutoGPT任务执行风险预警系统设计理念
  • 树形结构遍历与递归应用解析
  • 雷科电力-REKE2195电缆路径及定位仪
  • 轻量级部署方案:LobeChat在树莓派上的可行性实验
  • 口碑是营销出来的?格行真实用户实测:网速和售后真有那么好? “流量靠猜”“网速成迷”3 大场景实测给答案
  • AI搜索排名GEO优化服务商行业排行榜
  • AutoGPT支持Apple Silicon芯片加速了吗?M系列Mac实测
  • LWGANet:两大核心模块:TGFI(减空间冗余)和 LWGA(减通道冗余。
  • 如何用AI大数据在1秒内构建完整客户画像,获取高质量线索的源码系统
  • 好写作AI:专治学术“写作困难户”,让你告别深夜emo和DDL恐惧!
  • 好写作AI:论文格式“救星”,一键告别“调参”噩梦
  • halcon3d 求角平分面
  • 家校沟通不用“猜”,小二查成绩让每分进步都清晰可见
  • 云服务器邂逅英伟达B200:AI算力革命的黄金搭档
  • Qwen3-14B在编程与数学推理中的表现评测
  • AutoGPT在非营利组织运营管理中的价值体现
  • MyBatis基础入门《十五》分布式事务实战:Seata + MyBatis 实现跨服务数据一致性
  • 行为学实验室整体解决方案 动物行为学整体解决方案
  • 【前端】从零开始搭建现代前端框架:React 19、Vite、Tailwind CSS、ShadCN UI-第五章《主题(Theme)系统 —— Light / Dark / System》
  • 从零开始部署Qwen3-8B:VSCode安装调试全流程
  • LU,数显式脑立体定位仪 大鼠脑定位仪 小鼠脑定位仪 小动物脑定位仪
  • 2025年geo系统源码开发公司技术方案有那些