PowerShell 入门教程推荐和常用代码片段
入门教程推荐
个人经验是:
先快速过一遍,大概知道用法后,然后就开始尝试做一些简单的内容,碰上不会的再查。
直接打算一开始就先 “学全” 是很难坚持下去的。
快速过一遍:PowerShell 在线教程 pstips.net、PowerShell 101 | Microsoft Learn
也可以看一下官方的入门视频 快速入门 : PowerShell 3.0、快速入门 : PowerShell 3.0 第 5 课
不清楚的命令细节在这里面查 什么是 PowerShell? | Microsoft Learn、Windows PowerShell 帮助 (forsenergy.com)
要找已有的例子 PowerShell 技能连载 - 汇总索引 - 叹为观止 (vichamp.com)、google.com、stackoverflow.com
微软官方教程系列
文档教程:
什么是 PowerShell? - PowerShell | Microsoft Learn
PowerShell 101 | Microsoft Learn
视频教程:
PowerShell 3.0 入门 | Microsoft Learn
使用 PowerShell 3.0 编写高级工具和脚本 | Microsoft Learn
这个两个视频课程 B 站上有翻译过的
快速入门 : PowerShell 3.0【中文字幕】第 5 课没翻译
快速入门 : PowerShell 3.0 第 5 课:深入探讨管道【双语字幕】
PowerShell 教程:制作高级工具和脚本 【中文字幕】
个人博客类
PowerShell 技能连载 - 汇总索引 - 叹为观止 (vichamp.com)
PowerShell 方向的微软 MVP 吴波的博客,有很多 PowerShell 功能的示例代码片段
PowerShell 在线教程 – PowerShell 中文博客 (pstips.net)
比较简要地介绍了 PowerShell 的基础语法,有简单的示例演示。
想快速了解 PowerShell 基础语法可以先看这个,毕竟微软官方文档的确有点太长太全了。
其他网站
Windows PowerShell 帮助 (forsenergy.com)
一个包含了很多微软的帮助资料的网站,不止 PowerShell,全面到我以为是微软的,但是好像不是,微软官方的文档看不惯可以试试这个。
相关书籍
《Windows PowerShell 实战指南 第 3 版 (异步图书出品)》- 京东图书 (jd.com)
如果有京东会员的话,可以在京东电子书上免费看。
如果有知乎会员的话,也可以在知乎电子书上免费看。
PowerShell 工具
Windows PowerShell ISE
Windows 自带的 PowerShell 编辑工具,简单够用
Visual Studio Code
流行而且好用的轻量编辑器,配合各种插件体验极佳。
如果你要使用 VS Code 来写 PowerShell 脚本的话,注意保存的时候要把 .ps1
文件的编码改成 UTF-8 with BOM
SAPIEN PowerShell Studio 强大的 PowerShell GUI 设计器和脚本调试器 (sapien.com)
你可以在这个 SAPIEN PowerShell Studio 里面设计 GUI、打包成 exe、嵌入凭据。
常用代码片段
这里的话我放一些个人比较常用的片段,要参考的话,上面提到的吴波的博客里面的代码片段更多、更全。
我写在这里的代片段和吴波的博客里面的实现方法并不完全一致。
域失联修复
1 2 3 4
|
Reset-ComputerMachinePassword -Server "Domain.com" -Credential Domain\Admin
|
获取 IP 地址
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| function Get-LocalIP {
$Local_IP_Temp = ( Get-WmiObject -Class Win32_NetworkAdapterConfiguration | Where-Object { $NULL -ne $_.IPAddress -and $_.DefaultIPGateway -ne $Null } | Select-Object IPAddress ).IPAddress[0]
return $Local_IP_Temp }
$IP = Get-LocalIP Write-Host $IP
|
操作 SQL
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
| function Open-SQL { param ( $SQL_Database_arg, $SQL_Commandtext_arg )
$SQL_Server = "192.168.x.x" $SQL_UserName = "administrator" $SQL_Password = "password" $SQL_Database = $SQL_Database_arg $SQL_Commandtext = $SQL_Commandtext_arg
$SQL_Connection = New-Object System.Data.SqlClient.SqlConnection
$SQL_Connection.ConnectionString = "Data Source=$SQL_Server; Initial Catalog=$SQL_Database; user id=$SQL_UserName; pwd=$SQL_Password"
try { $SQL_Connection.Open() } catch { return "Unable to open SQL" }
$SQL_Command = New-Object System.Data.SqlClient.SqlCommand $SQL_Command.Connection = $SQL_Connection $SQL_Command.Commandtext = $SQL_Commandtext
$SQL_DataAdapter = New-Object System.Data.SqlClient.SqlDataAdapter $SQL_DataAdapter.SelectCommand = $SQL_Command
$Data_set = New-Object data.dataset $SQL_DataAdapter.Fill($Data_set) | Out-Null
$SQL_Connection.Close()
$SQL_Data_Temp = $Data_set.Tables[0]
return $SQL_Data_Temp }
$IP_SQL_info = Open-SQL -SQL_Database_arg "Auto_Install_Soft" -SQL_Commandtext_arg "SELECT * FROM dbo.Auto_Install_Soft WHERE [IP地址] = '$IP'"
Open-SQL -SQL_Database_arg "Auto_Install_Soft" -SQL_Commandtext_arg "UPDATE dbo.Auto_Install_Soft SET [排除安装] = '', [计划日期] = '2022-09-22', [最后限期] = '2022-12-30', [千牛] = 'True' WHERE [IP地址] = '$IP'"
|
改 IP 地址
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| $IP_address = "10.10.3.222"
$Subnet_mask = "255.255.255.0"
$IP_address -match "^\d+.\d+.\d+." | Out-Null $Default_Gateway = $matches[0] + "1"
$DnsOrderList = @("192.168.4.6", "192.168.4.7")
Write-Host $IP_address Write-Host $Subnet_mask Write-Host $Default_Gateway Write-Host $DnsOrderList
Start-Sleep -Seconds 5
$Wmi_Win32_Network = Get-WmiObject -Class Win32_NetworkAdapterConfiguration | Where-Object { $_.IPEnabled -ne $False -and $_.DefaultIPGateway -ne $Null}
if ($Wmi_Win32_Network.Count -eq 1) { $Wmi_Win32_Network.EnableStatic($IP_address, $Subnet_mask) $Wmi_Win32_Network.SetGateways($Default_Gateway, 1) $Wmi_Win32_Network.SetDNSServerSearchOrder($DnsOrderList)
Shutdown /s /t 60 }
|
补充
我工作比较忙,有的时候我写的东西要隔一两周、甚至一两个月才能重新捡起来继续写,我命令都忘记怎么写了。
除非你真的很熟练,写的代码也很好理解,不然能多写点注释就多写一点。
不写注释,各种变量命名也偷懒乱取,时间一长再回来看就得花半天时间重新理解之前写的什么。
原文作者:tjxwork
原文链接:https://www.tjxblog.com/blog/2023-0002
发布时间:2023-01-19