重逢Windows从powerShell开始

服务器

浏览数:37

2020-6-8

AD:资源代下载服务

#初学Windows从Linux开始

故事的起点

承认自己是不会使用Windows的,总比打开CMD就两眼一抹黑或者在听别人谈论AD的时候认为他们来自于外星强,这几天的感觉,其实Windows很友好,真的只是我们曾经不会使用她。

故事的起点来自一个配置任务,实现微软文档中一句话所描述的功能Windows AD DC is a KDC ,也就是微软的AD域控制器为一种KDC的实现方式,再进行NFS krb5加密实验。整个的这个Case流程大概是这样的:

被配置的Windows是Windows Server 2012r2,起初可能大家对Windows的想法是GUI上点啊点啊点,有可能在CMD中执行一个ipconfig.exe 看一下网络信息就可以了,配置的自动化实现基本靠部署配置文件,但这一次我却发现了大大的不同,首先是前段时间大红大紫的powerShell 已经集成了一个相对高的稳定版本,另一个是CMD亘古未变且AD的设置方法与Windows2003的时候并没有太多质上的不同(对比阅读文档发现的,Server2003那一年还上小学呢..),但惊喜就出现在了在配置好AD控制器后的一个选项Start PowerShell with the Module of AD Administration ,之后遍进入了一个柳暗花明的新世界,一个全新的无比强大的Shell出现在了眼前。

再一次认识Shell

一周的体验下来,真的想说这一次微软做的太好,如果说powerShell是一次考试的话,那么:

.Net framework ==物理, C#中的面向对象是powerShell的最终范式, 答题(完成任务)的模块都源于对.Net的调用
bash ==数学, 框架源于Linux Shell, 当然也就在集异璧之大成的bash身上
Windows ==英语, 对本地操作系统中功能模块的调用,采用了cmdlet这种已经编译好了的功能单元的形式
VBScript ==历史, 胡汉三又回来了,似曾相识, 这一次不再是以basic为基础, 但毕竟是主要源泉之一
AD ==生物, 研究答题的人的科学, powerShell可以将任何不直观地GUI配置直观的转化为命令行

所以,这次考试的特点会是及格简单,高分很难。

  • 有Linux使用经验,可以快速上手管道和重定向构成的过滤传递思维;
  • 有C# /Java编程经验,可以快速上手面向对象部分,将各个对象的方法组合起来解决问题;
  • 有Windows AD配置经验,可以很清楚的理解为什么powerShell会在对象中包含这样的方法,以及究竟什么方法是配置的关键;

换言之这就是一锅超级乱炖大杂烩,无论你喜欢吃什么菜,总可以找到享受这锅菜的方法。很赞很赞的可以从管道传递对象,很赞很赞的可以进行方法继承,很赞很赞的可以自己封装对象,可以自己定义方法;最赞的是在面向对象的同时利用>|< 可以将其完全线性化,这样的叫本既强大又易懂,真的可以说把Windows整体提高了一个境界。

初学使用Windows从Linux开始

但我仍然发现这门语言的核心在于>|< 上,无论是对象各异的方法还是图形化的完全后台脚本化,实质上只是把传递的物件从Raw String变为了对象,而已。对比一下同一个功能的不同形式:

ps -ef |wc -l >>/processCount #bash
$process =(Get-Process); #powerShell
$process.length >>"C:\processCount"

可能乍一看觉得 bash是管道过滤器重定向,典型的线性思维,powerShell很高级啊,调用了一个方法就解决了 但仔细想想,为何PowerShell要设计成面向对象的,表面上看通过调用方法加不同的过滤器可以将管道用的更加灵活,但实质上更可能是因为下面的两个原因:

  • 基于C#可以直接调用现有的库,避免了二次设计,也避免了再造出另一个平台:省事
  • 刚刚被设计出来没有grep /awk /sed 这样的文字流工具支持,更没有任何的GNU的下到底层的高效工具支持,所以换个思路,不再组合工具,而是把工具转化成方法集成在对象处理中:孤独

就在这样的条件下诞生了新一代的面向Windows的shell,省事+孤独,所以最好的切入点是从他的思想和起源开始一点一点剖析他自身的设计原理,之后也许会发现,所谓的引用object.method 是在工具极端有限的情况下模拟GNU toolset的一种折衷的经济之举,所以也许从bash ==数学 切入正是最好的方向。

在学习了一定的powerShell后,对Windows的感觉也不再是那么陌生,思维上更加的向UNIX靠拢,对于表面对象的配置,利用Get-relatedObjectField 的方式就可以直观的得到他的本质配置,学习速度也会突飞能进,真的开始对配置WIndows有感觉,正因为这一点,他从设计哲学上越来越像UNIX了,或许有一天变成了Winix也说不定,所以未雨绸缪吧,好好看看这个桌面市占率高到恐怖的操作系统如何蜕变的更加强大,更加可以与开源世界融合。

可以参考的教材

列举一下学习过程中自己看过的教材,仅仅是看过而均没有看完:

非常好的一本书,AD×powerShell两者一并学习,而且你真的知道,在静态IP下,安装AD需要哪几步?

<# Domain Controller is the core of the AD network, it provides all kinds of Servers
btw, AD DC is a KDC, the installion process:
#>
Install-WindowsFeature AD-Domain-Services ,DNS -IncludeManagementTools
$SMPass =ConvertTo-SecureString '<passwd>' -AsPlainText -Force
# The password of a user must be in the secureString form
Install-ADForeast -DomainName '<DomainName>' -SafeModeAdministratorPassword $SMPass -Confirm:$false

这就完成了一个基础AD域的安装和Administrator的创建,在Server2016TP上仍然有效。

写在最后

很高兴,作为读者可以不厌其烦的看我写到这里,这是我在OSChina的第一篇文章,Hello World.

记得有一次听一个GIS专业的女生说,她会用C /C++ /C#编程还会写Windows”界面程序”,这些头文件 /MFC /类库API 真的能在大学三年就掌握。。哇。。然而事情出了转机,出现了可以按C的面向过程有序的按C++的面向对象式的可以调用C#库的语言平台,这样说还可以揉进几种语言,可我们都是初学者,说“会”是对自己的一种不负责任,我不会,但我在走向会的过程中,就像算pi,我们都不会精确的数值算pi,真的靠公式你学“会”了算出的pi,是pi么。

那些年欠盗版Windows的情,可以考虑还在powerShell和AD上,相行莫相忘,且行且珍惜。

作者:chunwang