2022年4月

Cheatsheets

设置代理

PS C:\> $Env:HTTP_PROXY="http://localhost:7890"
PS C:\> $Env:HTTPS_PROXY="http://localhost:7890"

grep equivalent - Select-String

  • Simple Matching
    Select-String -Path "Users\*.csv" -Pattern "Joe"
  • Multi-Pattern Matching
    Select-String -Path "Users\*.csv" -Pattern "Joe","Marti","Jerry"
  • RegEx with head equivalent
    Select-String -Path "Users\*.csv" -Pattern '\\b[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}\b' | Select-Object -First 10
  • Recursively search csharp src files
    Get-ChildItem -Recurse *.cs | Select-String -Pattern 'keyword'

rm equivalent - Remove-Item

可以直接用,但是需要注意,rm -rf 等价于 Remove-Item -Recurse -Force,shell的参数不能直接用。

wget and curl equivalent - Invoke-WebRequest

下载文件这么写:Invoke-WebRequest -v https://path/to/file.exe -OutFile ./file.exe
如果想按照原来的名字呢?不幸地,你需要自己实现一个函数。当然你可以把函数像用bash一样保存在一个profile文件里,这个profile的路径可以用notepad $profile直接打开:

Function My-Download {
  param ( [parameter(position=0)]$uri )
  Invoke-WebRequest -uri $uri -OutFile $(Split-Path -path "$uri" -leaf)
}

Troubleshooting

标记“&&”不是此版本中的有效语句分隔符。

对Windows自带的5.1版PS,不支持&&操作符,需要这么用:

(command_1) -and (command_2)

如果不需要短路特性可以简单的使用分号隔开。
新版(Powershell 7以上)可以使用&&

一句话问题

  • 命令补全感觉怪怪的:需要让它学bash,但是只有新版可以。在profile(上文提到过路径)里这么添加:

    Set-PSReadlineKeyHandler -Key Tab -Function MenuComplete
  • 帮助文件下不下来:先考虑代理,如果在Windows中设置netsh winhttp set proxy "127.0.0.1:7890",在Linux/Mac中设置http{,s}_proxy(要在运行前通过env设置,不要进入powershell内设置);再运行Update-Help -UICulture en-US

Typecho的静态重写的意思的实质就是将链接里的index.php去掉,这非常有用,因为方便迁移,但是网上你能搜到的教程全部都是Nginx了,这对于IIS而言就非常折磨了。

虽然也有IIS开启这个功能的相关文章,不过笔者还是再重新整理一下相应内容主要是自己实现的时候没搜到。这个功能本质不算复杂,只不过是文档太过晦涩了,具体的方法请参考如下的文章:

基本上这四个网站看完就能自己写了。但是会遇到一个拦路虎:怎么在线调试Azure Web App的网站呢?日志哪里看呢?虽然Azure有官方文档,但是说实话讲的跟面条一样,啥都讲了没有重点。笔者这里具体说下怎么看Rewrite的问题日志:

  • Failed request tracing是我们的重点,因此要先去Azure Portal->App Service Logging里打开Failed request tracing选项(Detailed error messages视情况也可打开);
  • 在浏览器里复现你的问题,可以多复现几次;
  • 然后打开你的网站的kudu后台(也就是Kudu Services),点击上方的Tools->Diagnostic dump,下载日志文件,里面就能看到具体的报错信息了。

好的好的,知道你想要具体的规则怎么实现的,除了上面的地址以外,笔者的GitHub上也提供了相应的web.config文件。

添加了两个插件,一个是友情链接,另一个是reCaptcha。二者的git仓库地址见下:

插件的添加不再赘述,这里重点聊聊一些网上没讲过的问题:

  1. 部署问题。如果在Azure里使用的是Local git部署,那么直接git push上去就行,Kudu会自动diff差别,将插件同步到系统中。
  2. 添加具体的插件逻辑代码。recaptcha很好添加,重点是友链,需要修改主题的相关文件。
    themes/sidebar.php中添加这段代码:

     <?php if (!empty($this->options->sidebarBlock) && in_array('ShowLinks', $this->options->sidebarBlock)): ?>
         <section class="widget">
             <h3 class="widget-title"><?php _e('链接'); ?></h3>
             <ul class="widget-list">
                 <?php Links_Plugin::output(); ?>
             </ul>
         </section>
     <?php endif; ?>

    很显然,里面出现了ShowLinks这样的选项。因此还要再去主题的functions.php里更改,也就是添加一个ShowLinks的option,这方面的资料参考这里

主题方面的更新之后再说吧,感觉一次改动太多很折磨- -毕竟自己不是写php的

之前使用的是Azure自带的域名,这里终于可以使用上自己带的域名了。网上找了个Godaddy的优惠码,前两年年均只需要60大洋就能拿下,还是很实惠的。但是需要注意的一点,如果发现付款时提示“处理您的交易过程中出现问题。请验证您的付款信息,或使用另一种付款形式。”这个报错,请切回首页,拉到最底部的结算方式,将CNY改为USD,然后切回来使用Paypal支付。这个在现在(2022年4月)是可行的。

拿下域名后就可以在Godaddy和Azure的后台配置相应信息了,这里必须夸一下Azure的文档,写得很齐全,里面也介绍了在Godaddy里如何添加记录。一般只需要添加根域的记录即可,CNAME的记录不需要添加,因为你可以通过Godday配置301跳转跳到根域名(当然如果你有其他科学上网的需求另当别论)。

最后就是配置SSL,Azure中可以直接添加DigiCert的证书,基本上只要点点就可以完成,还是很方便的。从这里可以看到具体的流程。

这么一来,该有的设置基本都有了。虽然考虑做个CDN,但是看了网上的一些其他博客似乎也没搞这个,先鸽了,之后再说吧😄

看到发布时间就应该能看出来笔者花了多大功夫终于把Azure这个祖宗给折腾好。虽然之前一直在踌躇到底选择什么技术栈作为自己博客的后台(Node.js还是.NET),不过最后转念一想,不管怎么样,先有一个地方发布文章,再考虑其他乱七八糟的事儿,于是就决定先找一个比较好搭建的博客,也就是Typecho框架了。未来可能还会在迁移,不过谁知道呢?至少现在先搭起来架子,才有所谓的未来,不然永远都是踌躇,永远踏不出第一步。

值得一提的是这篇文章给了笔者非常大的帮助,不过有这么几个需要注意的点:

  • 一定要使用Windows - 倒不是说配置Linux什么的很麻烦,而是使用Windows就可以直接用MySQL in App这个功能,直接省了数据库实例的钱,如果使用那个默认的App+Database坑死你——谁会写一个20GB的博客?!
  • 在部署菜单中,不必向原作者一样选择OneDrive,可以选择Local Git,然后在本地推送代码上去更新。值得一提的是,这个代码可能会很有用:git push azure nzh10/prod_v120:master,这是用来指定推送线下和线上的不同分支的。
  • Azure里的端口不是默认的,请一定要跟着原作者走,就是在D盘。

为防止引用内容丢失,这里将原文步骤附上:

1. 打开Microsoft Azure(https://portal.azure.com/);
2. 新添加一个Web App。配置时选择Code + PHP + Windows操作系统(只有Windows系统支持MySQL in App);
3. 从Typecho官方网站(https://typecho.org/)下载最新的Typecho压缩文件;
4. 在Web App的设置菜单中,选择Deployment Center,可以选择使用OneDrive进行Deployment;
5. 将第3步下载的文件,解压缩到OneDrive的指定文件夹内。在Web App的Deployment Center中选择同步;
6. 在Web App的设置菜单中,选择Console,输入以下命令,记录下来用户名、密码、链接、端口的重要信息;
   `type D:\home\data\mysql\MYSQLCONNSTR_localdb.txt`
7. 访问Web App的在线地址,根据提示,选择MySQL设置,配置Typecho。

值得一提的是,Azure默认还提供了一个简单的域名,倒是避免了天天记ip的麻烦。之后换了域名加了SSL会附上具体的操作方法。