入门教程推荐
个人经验是:
先快速过一遍,大概知道用法后,然后就开始尝试做一些简单的内容,碰上不会的再查。
直接打算一开始就先“学全”是很难坚持下去的。
快速过一遍: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
个人博客类
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 编辑工具,简单够用
流行而且好用的轻量编辑器,配合各种插件体验极佳。
如果你要使用 VS Code 来写 PowerShell 脚本的话,注意保存的时候要把 .ps1
文件的编码改成 UTF-8 with BOM
SAPIEN PowerShell Studio 强大的PowerShell GUI设计器和脚本调试器 (sapien.com)
你可以在这个 SAPIEN PowerShell Studio 里面设计GUI、打包成exe、嵌入凭据。
常用代码片段
这里的话我放一些个人比较常用的片段,要参考的话,上面提到的吴波的博客 里面的代码片段更多、更全。
我写在这里的代片段和吴波的博客里面的实现方法并不完全一致。
域失联修复
1# 要在管理员下运行,输入的域账号也要是域的管理员权限
2
3Reset-ComputerMachinePassword -Server "Domain.com" -Credential Domain\Admin
获取IP地址
1function Get-LocalIP
2{
3 # 获取 本机IP 防止拿不到IP用了多次IP获取
4
5 # IP地址不为空的,网关也不为空的
6 $Local_IP_Temp = (
7 Get-WmiObject -Class Win32_NetworkAdapterConfiguration |
8 Where-Object { $NULL -ne $_.IPAddress -and $_.DefaultIPGateway -ne $Null } |
9 Select-Object IPAddress
10 ).IPAddress[0]
11
12 # 按要求自行修改
13
14 # IP地址不为空的,网关符合 "*.*.*.1" 格式的
15 #$Local_IP_Temp = (
16 # Get-WmiObject -Class Win32_NetworkAdapterConfiguration |
17 # Where-Object { $NULL -ne $_.IPAddress -and $_.DefaultIPGateway -like "*.*.*.1" } |
18 # Select-Object IPAddress
19 #).IPAddress[0]
20
21 return $Local_IP_Temp
22}
23
24
25# 用法示例
26
27$IP = Get-LocalIP
28Write-Host $IP
操作SQL
1# 函数 操作SQL
2function Open-SQL {
3 # 传入SQL数据库名和SQL语句
4 param (
5 $SQL_Database_arg,
6 $SQL_Commandtext_arg
7 )
8
9 #配置SQL服务器信息
10 $SQL_Server = "192.168.x.x"
11 $SQL_UserName = "administrator"
12 $SQL_Password = "password"
13 $SQL_Database = $SQL_Database_arg
14 $SQL_Commandtext = $SQL_Commandtext_arg
15
16 #创建SQL连接对象
17 $SQL_Connection = New-Object System.Data.SqlClient.SqlConnection
18
19 #使用账号连接SQL
20 $SQL_Connection.ConnectionString = "Data Source=$SQL_Server; Initial Catalog=$SQL_Database; user id=$SQL_UserName; pwd=$SQL_Password"
21
22 #打开数据库连接
23 try {
24 $SQL_Connection.Open()
25 }
26 catch {
27 # 如果打开失败的话,提前返回 "Unable to open SQL" 无法打开SQL
28 return "Unable to open SQL"
29 }
30
31 #创建SQL命令对象
32 $SQL_Command = New-Object System.Data.SqlClient.SqlCommand
33 $SQL_Command.Connection = $SQL_Connection
34 $SQL_Command.Commandtext = $SQL_Commandtext
35
36 #创建DataSet和 SQL Server之间的桥接器
37 $SQL_DataAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
38 $SQL_DataAdapter.SelectCommand = $SQL_Command
39
40 #创建DataSet
41 $Data_set = New-Object data.dataset
42 $SQL_DataAdapter.Fill($Data_set) | Out-Null
43 #$Data_set.Tables | Format-Table -Auto
44
45 #关闭数据库连接
46 $SQL_Connection.Close()
47
48 #----------------------
49
50 # 得到一份类似表的 DataRow 数据
51 $SQL_Data_Temp = $Data_set.Tables[0]
52
53 # 返回数据
54 return $SQL_Data_Temp
55}
56
57
58# 用法示例
59
60# 获取SQL
61$IP_SQL_info = Open-SQL -SQL_Database_arg "Auto_Install_Soft" -SQL_Commandtext_arg "SELECT * FROM dbo.Auto_Install_Soft WHERE [IP地址] = '$IP'"
62
63# 更新SQL数据
64Open-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# 要改的IP地址
2$IP_address = "10.10.3.222"
3
4# 要改的子网掩码
5$Subnet_mask = "255.255.255.0"
6
7# 要改的网关地址(这里是直接偷懒拿了IP地址,取了前3段,加上"1" 来生成的网关,可以直接定义 $Default_Gateway)
8$IP_address -match "^\d+.\d+.\d+." | Out-Null
9$Default_Gateway = $matches[0] + "1"
10
11# 要改的DNS地址
12$DnsOrderList = @("192.168.4.6", "192.168.4.7")
13
14# 打印一次看看要改的内容
15Write-Host $IP_address
16Write-Host $Subnet_mask
17Write-Host $Default_Gateway
18Write-Host $DnsOrderList
19
20
21Start-Sleep -Seconds 5
22
23
24# 获取网卡, IP已启用,而且网关不为空
25$Wmi_Win32_Network = Get-WmiObject -Class Win32_NetworkAdapterConfiguration | Where-Object { $_.IPEnabled -ne $False -and $_.DefaultIPGateway -ne $Null}
26
27# 只有1张符合条件的网卡才会修改IP
28if ($Wmi_Win32_Network.Count -eq 1) {
29 $Wmi_Win32_Network.EnableStatic($IP_address, $Subnet_mask)
30 $Wmi_Win32_Network.SetGateways($Default_Gateway, 1)
31 $Wmi_Win32_Network.SetDNSServerSearchOrder($DnsOrderList)
32
33 # 改完后60秒关机
34 Shutdown /s /t 60
35}
36
37# 用法示例
补充
我工作比较忙,有的时候我写的东西要隔一两周、甚至一两个月才能重新捡起来继续写,我命令都忘记怎么写了。
除非你真的很熟练,写的代码也很好理解,不然能多写点注释就多写一点。
不写注释,各种变量命名也偷懒乱取,时间一长再回来看就得花半天时间重新理解之前写的什么。
原文作者:tjxwork
原文链接:https://www.tjxblog.com/blog/2023-0002
发布时间:2023-01-19
评论