car*_*ett -2 powershell windows-server-2012
我正在准备一份关于 Windows 2012R2 中 Powershell 管理与基于 GUI 管理的可能性的快速演示。现在,我试图确定通常使用 MMC 或类似方法执行的管理任务仍然无法使用 Powershell cmdlet/函数。
从 2012R2 开始,使用 Powershell 至少几乎完全可以管理的一些功能示例是 IIS、DHCP、Active Directory。我很清楚使用 pre-powershell 工具、WMI、COM 或 .NET 程序集还有很多其他的可能性,但根据我的经验,很少有系统管理员觉得去那里很舒服,所以我将范围限制在 cmdlet 上。
你的问题没有意义
cmdlets
!PowerShell 是一种功能强大且可扩展的管理工具 - 任何您可以从管理控制台执行的操作,您都可以从 PowerShell 执行 - 只需熟悉底层 API 即可
即使不一定符合众所周知的 API 的配置选项也可以通过 PowerShell、文件系统、注册表、证书存储等的内置存储提供程序进行操作。
通过 PowerShell 与 WMI 交互几乎很容易,至少回顾我早期对 VBScript 的尝试(哦,可怕)。
PowerShell 中的核心模块带有各种 cmdlet,包括Get-WMIObject
(Windows 2012 引入了更通用的CIM cmdlets
like Get-CimInstance
):
$OSbitness = (Get-WmiObject -Class Win32_OperatingSystem).OSArchitecture
Run Code Online (Sandbox Code Playgroud)
圣球?!我们只是使用 WMI 告诉我们操作系统架构,而没有调用wmic
或编写 700 行 wsh 错误处理!
PowerShell 可以调用 COM 应用程序并与之交互。可以使用New-Object
cmdlet以这种方式访问许多 Microsoft 应用程序。例如,
请参阅这个使用 Excel 创建和保存电子表格的示例- 非常简洁!
由于 .NET 已经是 PowerShell 不可或缺的一部分(相同的对象模型、派生类型系统、相同的运行时环境等),使用混合反射和一些内置 cmdlet(如New-Object
和),.NET 可扩展性就在您的指尖Add-Type
。伸开!
Powershell 运行时集合类型不适合您?你想要一个字符串的 HashSet 吗?没问题:
$myHashSet = New-Object System.Collections.Generic.Hashset[String]
Run Code Online (Sandbox Code Playgroud)
需要将现有供应商库导入您的 Powershell 会话吗?没问题:
Add-Type -Path C:\Stupid\Old\App\Lib.Helper.dll
Run Code Online (Sandbox Code Playgroud)
需要来自 GAC 的托管库?没问题:
[Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
or
Add-Type -AssemblyName System.Windows.Forms
Run Code Online (Sandbox Code Playgroud)
动态的一些托管代码怎么样?一些使用C#
? 没问题:
$typeDef = "public class HelperFuncs {public static string HelloWorld(){return "Hello World";}}"
Add-Type -TypeDefinition $typeDef
[HelperFuncs]::HelloWorld()
Run Code Online (Sandbox Code Playgroud)
要访问 Windows 中的本机 API,我们必须进行一些 .NET 包装或编组,但DllImport和PInvoke.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")
Run Code Online (Sandbox Code Playgroud)
除此之外,PowerShell 是它自己的脚本语言,它建立在许多世界中最好的语言之上,包括从 Perl、ksh、Tcl 以及 C# 及其祖先等经过验证的语言借来的语法。
它具有流控制选项,如循环、开关、if-else 和各种通用比较运算符,支持多值分配和非常强大的面向对象的管道,以及无数其他功能。
老实说,PowerShell 在 Windows Server 管理方面的唯一真正限制是距离屏幕 20 英寸
归档时间: |
|
查看次数: |
726 次 |
最近记录: |