惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

阮一峰的网络日志
阮一峰的网络日志
D
Darknet – Hacking Tools, Hacker News & Cyber Security
S
Schneier on Security
The Last Watchdog
The Last Watchdog
Cyberwarzone
Cyberwarzone
S
Securelist
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
C
Cyber Attacks, Cyber Crime and Cyber Security
L
Lohrmann on Cybersecurity
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 司徒正美
The Cloudflare Blog
V
V2EX
博客园_首页
博客园 - 聂微东
Vercel News
Vercel News
人人都是产品经理
人人都是产品经理
G
GRAHAM CLULEY
T
Tenable Blog
Last Week in AI
Last Week in AI
Y
Y Combinator Blog
L
LINUX DO - 最新话题
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
SecWiki News
SecWiki News
博客园 - 三生石上(FineUI控件)
S
Secure Thoughts
N
News | PayPal Newsroom
T
The Blog of Author Tim Ferriss
The GitHub Blog
The GitHub Blog
T
Troy Hunt's Blog
博客园 - 【当耐特】
Forbes - Security
Forbes - Security
H
Hacker News: Front Page
A
About on SuperTechFans
B
Blog RSS Feed
Engineering at Meta
Engineering at Meta
MongoDB | Blog
MongoDB | Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
罗磊的独立博客
D
DataBreaches.Net
P
Privacy & Cybersecurity Law Blog
Schneier on Security
Schneier on Security
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Google DeepMind News
Google DeepMind News
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Jina AI
Jina AI
D
Docker
P
Proofpoint News Feed

博客园 - 润之

关于 Excel 中导入 JSON 文件 Git Bash 在使用 pacman 安装软件包时的报错问题处理 .NET 操作 RabbitMQ 踩坑记录 Git Bash 中 pacman 安装软件包失败的问题处理 深度操作系统 deepin 20.8 定制的 SSH 安全模块问题 关于在WSL中使用RabbitMQ的问题 访问局域网资源,出现“指定的网络密码不正确” 微信图片缓存中的 dat 文件处理 关于禅道的白屏问题 Python处理编码汉字的一些方法收集 使用xrdp远程管理debian的一些记录 安利一个分支版本的Notepad2 匿名类对象的相关测试 关于 Win10 下使用 IETester 的问题 关于 Windows 10 字体安装目录的问题 关于 NPOI 导出的 Excel 出现“部分内容有问题” 的解决方法 解决美图看看不出现在“Open with”的子菜单中的问题 关于BLOB/TEXT字段存储设计及性能的简单研究 Win10 远程服务器版
PowerShell脚本编写踩坑记
润之 · 2022-06-04 · via 博客园 - 润之

最近由于业务需要,想写个 PowerShell 脚本来实现数据库的一些批量操作,其实用 Python 实现起来是很简单的事,但不想在生产环境安装 Python 了,由于服务器是 Windows Server,想用 PowerShell 来实现试试,正好顺便体验一下号称宇宙最强的 Shell 到底是不是浪得虚名。

初期进行了一些相关的试验,基本上一切顺利,确保各种功能都可以实现,比如读写MySQL、调用.NET类库,感觉一切都没问题了,就正式制作了一个完整的生产脚本。

谁知道在最终测试的时候总是不行,问题总是出在一句读取数据的脚本上,这条语句要一次读出几万条数据,总是不读取,怀疑是由于读取的慢,被 PowerShell 的异步机制给忽略了,然后开始各种研究、各种折腾。尝试了 Start-Job -ScriptBlock 然后 Wait-Job / Receive-Job -Wait 都不行,而且在折腾 Job 模式的时候还发现,在 Job 代码块中没法调用全局代码中定义的函数和变量,好像这个代码块是一个新的独立进程一样,这个代码块里的变量什么的都要单独声明。

折腾了半下午,最后发现之前测试时能读取到数据的代码,在这个生产脚本中也不能读取到数据了,感觉有点灵异!最后经过逐步排查,最终发现问题竟然出在注释上!这简直太不可思议了!经过反复测试,发现只有某行注释中有“的记录”三个汉字,这行注释下面的一行自动失效,貌似也被注释掉了!例如:

$xx = "123"
# XXX的记录
$xx = "abc"

Write-Host $xx
# 这里输出的是 123
$xx = "123"
# XXX的记录

$xx = "abc"

Write-Host $xx
# 这里输出的是 abc


发现这个情况之后,在这行注释之后多空了一行,生产脚本工作起来就一切正常了!

PS. 第二天才发现,其实并不是 PowerShell 的 BUG,相信微软也不会出现这么低级的 BUG,其实是由于 PowerShell 的窗口环境对 UTF-8 的支持不好,而用 VSCode 创建的 PowerShell 脚本默认又是 UTF-8 格式,所以在执行脚本的时候,实际上是“的记录”这三个汉字产生了乱码,怀疑是乱码存在 BACKSPACE 或 DEL 符,导致把接下来的一行也拉到了和注释相同的一行。最终把脚本的编码改为GBK,一切问题都不存在了!