[PowerShell]人人都值得学一点PowerShell实现自动化(2)会使用Excel简单函数就能上手PowerShell

2021-08-20 15:35:49 浏览数 (1)

本系列说是人人都值得学PowerShell,也是因为其简单,无需高深的编程知识即可开始上手,几句代码就可以完成很多日常要重复性工作,本篇给大家展示下PowerShell的易上手,以几个小例子一同来感受一翻。

学习PowerShell最不怕学习资料少

相对Excel用户群体有录制宏的方式来学习VBA,在PowerShell的学习上,其实也是非常容易的,有时甚至比学习VBA更简单,在入门的角度来看。

虽然PowerShell貌似很冷门,少有资料学习,但也不妨碍一般的职场人士来学习它。最丰富的学习资料就是其内置的帮助文档。一般来说,只要我们善于使用帮助文档,可以解决我们大部分的学习问题,特别是入门级的简单应用。

在使用PowerShell的过程中,我们更多只需要关心我们要做什么,然后最好能够想到相应的英文关键字,可以通过关键字搜索出相应的命令来,然后就可以查找其内置的帮助文档,连搜索引擎都不需要(翻译软件倒是需要的,因为帮助文件很不幸地是英文版的)。

查看命令的详细用法

帮助文档写得非常详细,可以跳过其参数说明,直接看最下方的示例。

案例1:遍历文件夹示例

虽然说PowerShell是一个要编写代码的方式交互的脚本语言,没有像其他工具那样方便直接界面完成,但脚本语言有其好处是灵活处理,懂使用后,灵活度高出许多。

像文件类的日常场景非常多,虽然Excel催化剂插件已经几乎将有使用场景的功能都囊括了并且也将使用体验做到极致,但作为练习场景,还是不错的。

为了最大程度地减少手动写代码的数量,我们可以尽量使用命令辅助界面来操作。

有一点点DOS或CMD命令行使用经验的人群,一般都很有使用过dir命令,这个命令就是列出当前文件夹下的文件和文件夹清单。

不懂也没关系,只是需要现在记住一下就可以。

在PowerShell中,我们一样可以使用dir这样的命令,但我们为了查看到其标准的命令,使用了一个Get-Alias的命令,将dir的标准命令找出来,PowerShell可以使用dir这样的别名的方式来简写命令或让cmd或linux用户快速熟悉,所以我们找到其真正的标准名称是Get-ChildItem。

记住标准名称的成本其实更低,因PowerShell已经使用了有意义的名称,而非一些简写、缩写,非英语环境的人难以记住的名称,使用完整名称更好记。

接下来,把完整的命令,复制到右侧的命令窗格中去查找命令的输入参数,不熟悉的还可以按上文一样查找一下帮助文档及其示例简单学习下。

可以点击运行、插入、复制等按钮,具体对应的情形可以自行测试下,现在选择【复制】按钮,往脚本编辑区粘贴一下。将看到我们已经通过界面生成了以下的代码命令。遍历指定的Path路径,并且递归遍历子文件夹。这样的命令就可以运行起来。

代码语言:javascript复制
  Get-ChildItem -Path F:自媒体相关其他文章分享powershell文件夹遍历 -Recurse

可以按【运行选择】将当前选择状态下的代码运行。同样可以上面一步不用复制直接用【运行】或【插入】按钮。

最后遍历的所有文件、文件夹清单就出来了,一条命令执行一件事情,PowerShell就是这么简单。

当然只在控制台窗口中显示,没有太大意义,我们更想把结果存在文件里如Excel里可以打开,此时可以存在csv文件里,后面再介绍如何存到Excel文件中。

同样地使用命令窗格,输入csv关键字,可以查看到有一个【Export-Csv】命令是我们想要的导出命令。

同样道理,我们使用界面生成一条导出命令

命令的代码如下:

代码语言:javascript复制
 Export-Csv -Encoding Default -Force -LiteralPath F:自媒体相关其他文章分享powershellchildItems.csv

最后我们用PowerShell管道将Get-ChildItem和Export-Csv串起来,管道就是一个竖线符号,代表前面的结果直接输送到后面使用,即前面生成的文件、文件夹信息,流到后面输出csv命令使用,代码如下:

代码语言:javascript复制
Get-ChildItem -Path F:自媒体相关其他文章分享powershell文件夹遍历 -Recurse | Export-Csv -Encoding Default -Force -LiteralPath "F:自媒体相关其他文章分享powershellchildItems.csv"

然后就生成了一个csv文件,里面存有我们Get-ChildItem遍历所有文件、文件夹项目命令生成的结果清单。两个命令,就可以做这么多的事情,现在可以感受到PowerShell的简单便捷了吧。

案例2:批量创建Windows用户

经过案例1的学习,已经领略到右侧命令窗体创建PowerShell命令的便捷性,此处不再重复截图,直接写代码。

以下代码用test作占位符,演示New-LocalUser命令的关键参数。有了这个命令,就可以创建我们的用户了,需要注意一点的是Password参数有点特殊,需要将密码字符用另外一条命令作一下转换。

代码语言:javascript复制
New-LocalUser -Name test -Password test -Description test -FullName test -PasswordNeverExpires

如果只是创建一个用户,使用Windows界面操作可能更快,如果创建100个用户呢,毫无疑问,是我们用PowerShell的代码来创建最快,我们可以在Excel上用公式生成一批用户命令,批量执行多条命令实现批量操作。

懂Excel字符串拼接函数就可以做出以下的多条命令来。此种方式甚至不需要学会编程语言中的循环结构的使用,利用Excel的函数向下填充功能,就可以做到我们编程中的循环操作的结果。

此处,快速给大家演示如果使用PowerShell的编程方法,应该如何去做,直接贴代码如下:

代码语言:javascript复制
$csv=Import-Csv -Encoding UTF8 -Path F:自媒体相关其他文章分享powershell创建用户创建用户.csv
$csv|ForEach-Object {   
$pwd=ConvertTo-SecureString -String $_.Password -AsPlainText -Force
New-LocalUser -Name $_.Name -Password $pwd  -Description $_.Description -FullName $_.FullName -PasswordNeverExpires
  }

以上代码涉及到PowerShell语言中的变量定义、循环结构等知识点,有兴趣的朋友可以将PowerShell的语法学习一下,就很好理解了。

先读取csv,再用管道将读取到的内容供下一步遍历使用,因密码参数需要用密码格式,用了一个ConvertTo-SecureString作转换,最后还是调用New-LocalUser创建用户,整个过程非常简炼,一条命令做一件事情,相比其他语言来完成同样的操作,代码量就多出许多。

最后,我们用Get-LocalUser,可以查看到我们的创建是成功的。

当然有创建,就有删除,我们用Remove-LocalUser来删除用户,同样使用管道的方式,将Get-LocalUser得到的用户清单,通过Where作筛选后,传给Remove-LocalUser删除。

代码语言:javascript复制
Get-LocalUser | Where-Object Name -Like "test*"|Remove-LocalUser

结语

本篇以两个简单例子,给大家演示了PowerShell的易学易用,若静下心来学习一下语法,使用现成的大量PowerShell命令,已经可以帮我们完成非常多的工作,再结合社区里大牛们写的一些轮子,我们在使用PowerShell的过程也将变得更加轻松。

作为一个数据化时代,对办公人员的要求越来越高,非专业码农入手一门编程语言,可以在许多场景上都可以不求于人实现很多自动化操作,PowerShell是一个不错的选择,良心推荐。

笔者未来聚焦在数据领域的分享,不限于Excel,会分享更多Sqlserver、dotNET、Azure、PowerBI等话题,升级数据分析的能力,欢迎继续关注。*

0 人点赞