入门教程推荐

个人经验是:

先快速过一遍,大概知道用法后,然后就开始尝试做一些简单的内容,碰上不会的再查。

直接打算一开始就先“学全”是很难坚持下去的。

快速过一遍: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 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、嵌入凭据。

常用代码片段

这里的话我放一些个人比较常用的片段,要参考的话,上面提到的吴波的博客 里面的代码片段更多、更全。

我写在这里的代片段和吴波的博客里面的实现方法并不完全一致。

域失联修复

POWERSHELL
1# 要在管理员下运行,输入的域账号也要是域的管理员权限
2
3Reset-ComputerMachinePassword -Server "Domain.com" -Credential Domain\Admin
点击展开查看更多

获取IP地址

POWERSHELL
 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

POWERSHELL
 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地址

POWERSHELL
 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

版权声明

作者: tjxwork

链接: https://tjxblog.com/blog/2023-0002/

许可证: CC BY-NC-SA 4.0

使用者可以对本创作进行转载、节选、混编、二次创作,但不得运用于商业目的,且使用时须进行署名,采用本创作的内容必须同样采用本协议进行授权。

评论

开始搜索

输入关键词搜索文章内容

↑↓
ESC
⌘K 快捷键