PowerShell 不只是一堆cmdlets!

PowerShell 不只是一堆cmdlets!

我正在准备一个简短的演示,介绍在 Windows 2012R2 中使用 Powershell 管理的可能性,以及基于 GUI 的管理。现在,我试图确定哪些通常使用 MMC 或类似工具执行的管理任务仍然无法使用 Powershell cmdlet/函数执行。

自 2012R2 起,使用 Powershell 至少几乎完全可管理的功能包括 IIS、DHCP 和 Active Directory。我很清楚,使用预 Powershell 工具、WMI、COM 或 .NET 程序集还有许多其他可能性,但根据我的经验,很少有系统管理员愿意使用这些功能,因此我将范围限制在 cmdlet 上。

答案1

你的问题本身没有意义

PowerShell 不只是一堆cmdlets

PowerShell 是一个功能强大且可扩展的管理工具 - 任何你能在管理控制台上完成的操作,你都可以在 PowerShell 上完成 - 只需熟悉底层 API 即可

即使不一定符合知名 API 的配置选项也可以通过 PowerShell、文件系统、注册表、证书存储等内置存储提供程序进行操作。

威盛

通过 PowerShell 与 WMI 交互几乎很容易,至少回顾我早期使用 VBScript 的尝试(哦,多么恐怖)。

PowerShell 中的核心模块带有各种 cmdlet,包括Get-WMIObjectWindows 2012 引入了更通用的CIM cmdlets喜欢Get-CimInstance):

$OSbitness = (Get-WmiObject -Class Win32_OperatingSystem).OSArchitecture

太棒了?!我们只是使用 WMI 来告诉我们操作系统架构,而无需调用wmic或编写 700 行 wsh 错误处理!

串口

PowerShell 可以调用 COM 应用程序并与之交互。许多 Microsoft 应用程序都可以通过这种方式使用 cmdlet 进行访问New-Object
例如,请参阅此示例使用 Excel 创建和保存电子表格- 很简约!

.NET?没问题!

New-Object由于 .NET 已经是 PowerShell 不可或缺的一部分(相同的对象模型、派生类型系统、相同的运行时环境等),因此,使用反射和一些内置 cmdlet(如和),.NET 的扩展触手可及Add-Type。扩展吧!

Powershell 运行时集合类型不适合您?您想要一个字符串的 HashSet 吗?没问题:

$myHashSet = New-Object System.Collections.Generic.Hashset[String]

需要将现有的供应商库导入到您的 Powershell 会话吗?没问题:

Add-Type -Path C:\Stupid\Old\App\Lib.Helper.dll

需要 GAC 提供的托管库吗?没问题:

[Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
or 
Add-Type -AssemblyName System.Windows.Forms

那么,运行中托管代码怎么样?使用 轻松实现几个静态函数C#?没问题:

$typeDef = "public class HelperFuncs {public static string HelloWorld(){return "Hello World";}}"
Add-Type -TypeDefinition $typeDef
[HelperFuncs]::HelloWorld()

本机 API?

为了访问 Windows 中的本机 API,我们必须经过一些 .NET 包装或编组,但是导入动态链接库调用网络使这个任务很简单以及:

$MethodDefinition = @'
[DllImport("kernel32.dll", CharSet = CharSet.Unicode)]
public static extern bool CopyFile(string lpExistingFileName, string lpNewFileName, bool bFailIfExists);
'@
$Kernel32 = Add-Type -MemberDefinition $MethodDefinition -Name 'Kernel32' -Namespace 'Win32' -PassThru

$Kernel32::CopyFile("C:\somefile.txt","C:\newLocation\somefile.txt")

除上述内容外,PowerShell 是一种自己的脚本语言,它吸收了许多领域的最佳经验,包括借用了 Perl、ksh、Tcl 以及 C# 等成熟语言及其祖先的语法。

它具有流控制选项,如循环、开关、if-else 和各种通用比较运算符、支持多值分配和非常强大的面向对象管道,以及无数其他功能。

说实话,在 Windows Server 管理方面,PowerShell 的唯一真正限制是距离屏幕 20 英寸

相关内容