windows powershell 没有vi_「PowerShell」人人都值得学一点PowerShell实现自动化(2)

部分读者反应太多知识要学了,学完一轮又一轮,笔者也不想单单为了制造学习而学习,所有Excel催化剂所发布的内容,都是笔者所亲自使用到的,当然很多领域也没有深挖到很底的程度。

众多工具、语言都是为了我们去服务的,Excel催化剂不提倡为了学习而学习,所以很有必要先评估一下每一样知识对自身工作及职业生涯上有何价值再认真地去投入一些时间去学习。

在PowerShell这样的小众语言中,本篇尝试给大家梳理一下,仅能站在笔者有限的知识视野范畴,如有补充欢迎留言。

PowerShell使用场景

虽然说PowerShell也是在dotNET体系内,凡是dotNET语言可以完成的,它也几乎可以同样完成,但完成的代价可能不一,有些部分可能没有使用其他语言如C#等语言来得方便好用。

同样地PowerShell作为一门定位于帮助运维人员实现日常工作自动化的脚本语言,很多方面有其独特的优势所在,虽然用其他语言、工具一样可以完成,但PowerShell完成得更漂亮,更方便快捷。

详细的PowerShell优势可以参考下文所述。

PowerShell为什么强大 – PowerShell 中文博客 https://www.pstips.net/why-is-powershell-powerful.html

在Windows系统运维人员中使用面广

《PowerShell实战指南》一书,是面向运维人员的角度而写,如果想更深入地去了解,不妨看看。

例如一个系统管理员,需要管理几百台电脑,对他们安装补丁、软件等操作,可以用PowerShell直接自动化脚本完成,它擅长远程访问控制其他电脑。

同样地,因为PowerShell是跨平台的语言工具,在MAC和Linux上也可以使用,具体能否在这些系统上做运维就不得而知了。

在熟悉DOS命令的群体中,使用PowerShell可以完美替代CMD命令行工具,并且功能更强大,而很多命令也可以复用,无需重新学习,如dir/cd/config等经典的命令。

对其他微软系产品的自动化管理

同样地笔者非运维人员,在这一块也没有太深入了解,据笔者所知,使用PowerShell可以管理微软系绝大部分的产品如Exchange、SharePoint、Sqlserver、OFFICE365,而笔者主要的使用场景,目前为止,只有Azure的资源的运维管理。

因为Azure是微软的未来,所以作为认真追随微软的人来说,没有理由会不跟上去先学习一下PowerShell,为了日后更好地运维Azure的资源。

Azure上使用PowerShell真实场景

分享一点点笔者真实的项目应用,使用PowerShell对Azure的Azure SQL和Azure AS的资源开关升降自动化。

因笔者使用了Azure SQL和Azure AS两项服务,用于PowerBI的项目中,通过资源的开关升降操作,可以为企业节省出不少的Azure消耗费用,非常有实际推广价格。

我们Azure SQL仅用于数据仓库存储数据的作用,更准确地说只是为了给Azure AS分析服务提供更新多维数据模型时的数据源作用,所以整个使用时段是非常短的。

我们只需在数据ETL的时候,将Azure SQL的定价层性能调高,让旧数据删除与新数据插入性能更高,再就是数据ETL结束后Azure AS分析服务需要读取Azure SQL数据源时,读取的性能更高。这两个环节需要使用,其他时候可以关闭(Azure SQL不能关闭,只能降低到最低一层,最低层非常廉价,98元一个月全开,相当于关闭差不多。)

同样地在Azure AS分析服务供用户查询报表时使用,提供底层的计算能力,也因为用户只会在上班时间才有必要开通此服务,在节假日和下班时间,可以关闭。在上班时间,可能一个星期也只有某一段时间段才会有大量的用户同时访问报表,其他时段使用的人很少,这样也给我们很大的优化空间,忙时将定价层性能调主,闲时调低。

最后我们开发一个手动接口,让手动临时需要更改资源的状态可以实现,综合上述所述的场景,最终用PowerShell来控制Azure的资源,也是非常容易的事情,只需简单了解下PowerShell的语法和照着官方示例小改一下即可完成。

PowerShell的使用方式

当写好了PowerShell脚本后,我们想执行它或使用任务调试的方式来完成固定周期的自动执行步骤,笔者暂时发现的方法用如下几种。

直接PowerShell ISE上执行

使用PowerShell ISE,打开保存的脚本文件,直接在上面执行即可。

365e75c0e8a1c137682599310416f72c.png

使用CMD或PowerShell控制台执行

可以在控制台上引用文件路径,也可以执行PowerShell脚本。

此处需要在脚本文件前加个点号。

46a2ee64a2c3eabac3cd30100f74547e.png

使用批处理的方式执行

可以用CMD执行,当然也可以将其封装成bat批处理任务,双击即可完成执行。

c895ec1e6b030d7da3f828060714147e.png

使用任务计划的方式定时执行

我们更想要的真正自动化执行是定时给我们去执行代码,用Windows的任务计划就可以非常简单地完成定时任务。

因为PowerShell.exe的所在文件夹已经有环境变量了,所以直接给出程序名就可以。当然全路径也是可以的。

添加参数的位置加上PowerShell脚本的路径即可,这里前面加了个运行策略参数,Bypass是什么警告都不通知,比较顺畅运行,也可以不加。

完整的参数是:-ExecutionPolicy Bypass E:est.ps1

c9775fbc1fe157929bdaa31dadbc6d49.png

使用Sqlserver代理作业去运行

这种方式也是笔者在项目实际中所使用的,代理的方式,更好用一些,可以同时执行多个步骤,例如执行完PowerShell脚本后,下一步再执行其他任务。

当然这里可以直接写脚本内容,引用脚本文件也可以,记得加个英文句号在前面。

8d8394ccf37a224e3377748c2f63c197.png

其他语言调用

据笔者所知,在dotNET语言可以轻松调用PowerShell脚本,至于如何实现,笔者没有深入研究过,有兴趣的可以自行google一下。

在其他语言中调用PowerShell功能,也是非常有优势的,可以实现强强联合,也是像笔者这样的业余人员所钟爱的。

结语

此篇简单给大家分享了一些PowerShell的应用场景和其对应的实现方式,对于特定的场景来说,PowerShell还是非常有优势的,并且学习成本真心不高,非常值得推荐使用。

下一篇给大家介绍一点PowerShell的轮子世界,可以怎样复用现有轮子加快我们的功能实现,欢迎继续关注。

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

### 关于 PowerShell 中使用 vi 编辑器时出现乱码问题的解决方案 在 PowerShell 中使用 vi 编辑器可能会遇到字符编码不匹配的情况,从而导致显示或保存文件时出现乱码。以下是可能的原因以及对应的解决方法: #### 原因分析 1. **Vi 的默认编码设置** ViVim 默认使用的编码可能是 Latin-1 (ISO-8859-1),而不是 UTF-8。如果文件本身是以 UTF-8 编码存储的,则可能导致乱码现象[^2]。 2. **PowerShell 的控制台编码** Windows PowerShell 控制台默认使用的是 OEM 字符集(通常是 CP437 或其他本地化编码),这与现代文本编辑所需的 Unicode 不兼容[^3]。 3. **环境变量未正确配置** 如果系统的区域设置、语言选项或者终端模拟器的相关参数未调整到支持多字节字符的模式,也可能引发乱码问题[^4]。 --- #### 解决方案 ##### 方法一:更改 Vi/Vim 的编码设置 可以通过修改 `.vimrc` 文件来强制指定 Vi 使用 UTF-8 编码: ```bash set encoding=utf-8 set fileencodings=ucs-bom,utf-8,cp936,big5,euc-jp,gb18030,koi8-u,cp1251,latin1 ``` 上述命令会告诉 Vi 首先尝试读取带有 BOM 的 UCS 文本,接着依次检测 UTF-8 和其他常见编码格式。这样可以有效减少由于编码冲突引起的乱码情况。 ##### 方法二:调整 PowerShell 的输出编码 为了使 PowerShell 能够更好地处理非 ASCII 字符串,在启动脚本中加入如下代码片段: ```powershell $OutputEncoding = [System.Text.Encoding]::UTF8; [Console]::InputEncoding = [System.Text.Encoding]::UTF8; [Console]::OutputEncoding = [System.Text.Encoding]::UTF8; ``` 此操作将全局改变当前会话中的输入/输出流所采用的字符编码方式为 UTF-8,有助于改善跨平台协作场景下的文字呈现效果。 ##### 方法三:利用 WSL 提供更友好的 Linux 开发体验 对于习惯于 Unix-like 工具链的朋友来说,借助 Windows Subsystem for Linux (WSL) 可能是一个不错的选择。安装并启用 WSL 后,可以直接运行原生本的 GNU/Linux 应用程序,其中包括功能完备且预设好国际化特性的 VIM 实现[^5]。 --- #### 注意事项 尽管以上措施能够显著缓解大多数情况下发生的乱码状况,但在某些特殊条件下仍需额外注意以下几点: - 确认目标文档的实际编码形式; - 测试不同字体渲染引擎对复杂表意符号的支持程度; - 定期更新相关软件至最新稳定以获取持续改进后的特性增强。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值