很早以前用过直接调用别人写好的DLL,直接在PowerShell中使用,知其然不知其所以然,为了防止以后忘记,这次做个详细记录。 引子 PowerShell不是万能的,但毕竟都是.Net家族的儿子,很多系统原生无法实现的功能(特别是图形编程,以及传统领域的操作),大部分都能在’C#’那找到合适的例子,所以或多或少算是有个解决方法。 现在最大的挑战是,PowerShell毕竟出来这么多年...
为Hyper-V虚拟机设置动态MAC的脚本
需求 问题是这样的,手里有一波虚拟机,已经有MAC地址了,而且是静态的,但是某一天需要给他搬家,虚拟机所在的新家(VMM)限制了MAC地址段。所以需要给这些虚拟机先设置成动态MAC,让他们拿到新地址,然后再把新地址固化下来。 实现 手动操作就不说了,依然代码实现。老实说,我找了很久的代码。基本都是实现反向需求,就是给虚拟机设置静态MAC。但是我这不一样,我想设置成动态的啊。 首先感谢这位...
快速剔除不存在的Active Directory域信息
背景知识 在给大型的Active Directory环境做架构升级、调整、扩容、还原等操作时,(比如30节点以上的环境),直接拿生产练手属于作死的行为。所以搭建POC环境很有必要。 这篇文章是帮助大家解决在大型生产环境搭建Active Directory域POC时的一个繁琐步骤。 处理流程 按照传统做法,首先是备份环境中的任意一台Active Directory域控制器(最好是虚拟机),...
PowerShell处理IPMI的UEFI启动
引子 ipmitool.exe是一个非常棒的开源工具,没有之一。 通过这个工具,我们可以很方便的批量修改服务器的属性,比如启动顺序,检查服务器上的磁盘、内存、硬件信息。 我这里之前用到的一个功能是,用ipmi去修改服务器的启动顺序,调整为“下一次从PXE启动”。 网上找的命令,XX机器很好用。但是XXXX就不好用,比如国产良心联想。问题原因经过分析,也很清晰了。主要是设置成PXE启动没问...
从VMM获取主机带外地址
需求 在使用SCVMM的时候,需要统计一下哪些主机配置了带外管理地址,以及使用了这个带外管理地址的主机名字是啥。 这其实是一个很简单的需求,问题只是在于这个带外的地址长的比较深它藏在.PhysicalMachine.BMCAddress下 $date = date -Format MMddhhmmss $a = Get-SCVMHost | Sort-Object -Property na...
PowerShell保存剪贴板图片并构造MarkDown语句
目标 最近在学着用MarkDown写文档,对传图片深恶痛绝。准备自己用PowerShell造个轮子,还好提前搜索,找到了很多大哥的文档。 整个要做的事情流程是 鼠标复制个剪贴板图片 进入程序处理逻辑 处理剪贴板图片,保存成本地文件(png或者jpg) 上传到一个图床,获取图床的连接 把图床的链接构造成M...
如何更智能的看懂PowerShell的英文注释
引言 无论是什么语言的代码,合理的注释以及手册都是交付的必要条件。 经过上一个章节,相信大家可以明白给变量命名的重要性。现在新的问题来了: 存在语言障碍的情况下,怎么去读懂别人的代码,或者说,更明白的看懂注释。 学外语 我从不掩盖自己屎一样的外语。从多年工作来说,外语薄弱会有很多影响,但对编程的影响不是致命的。 翻译 现在机器翻译已经做到相对足够好,比如下面这家公司的产品 ...
如何编写完全无法维护的powershell脚本
说起无法维护的代码,相信朋友们有很多的想法,比如说没有注释、屎一样的逻辑、通篇重复代码 但是下面这个方法一定是最彻底最让你绝望的。 方法 朋友们一定会对变量的命名下很多心思,如果不认真对待变量名,后果是致命的。 下面是把一个现有的ps1文件,简单的转换成作死代码。 $gcfile = Get-Content "C:\x\azaa.ps1" $xyz = ($gcfile -matc...
不用telnet,powershell快速ping端口
在Windows中,测试一个目标地址的端口是否通断,常用办法是使用telnet。 但是这工具的问题在于不随系统安装,且对端目标端口失败的时候,超时时间很长 #找到一个大佬分享的方法 $address = "192.168.1.10" $port = 80 $tcp = new-object Net.Sockets.TcpClient $tcp.Connect($address,$...
Ad时间同步,需要配置多时间源的环境
针对AD中配置时间源,方法基本是固定的 打开命令行模式,执行以下命令: w32tm /config /manualpeerlist:timeserver /syncfromflags:manual /reliable:yes /update (其中:timeserver设置为 xxx.xx.xx.xx) 然后, 重启 W32Time 服务. 验证时间服务器是否可用,可以使用以下方法,在命...