65.9K
CodeProject 正在变化。 阅读更多。
Home

PowerShell 4.0 - 有什么新内容?

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.71/5 (8投票s)

2013年7月29日

GPL3

5分钟阅读

viewsIcon

61543

downloadIcon

267

本文将向您介绍最新的 PowerShell 技术,例如新的或扩展的 cmdlet、期望状态配置、Windows 管理框架 4.0 等。

引言

在本文中,我们将探索一些能简化管理员或操作员工作的出色新功能。我们将展示期望状态配置等功能。新 cmdlet 和扩展 cmdlet 将得到演示。有关 PowerShell 内部机制 和 PowerShell 4.0 内部机制的详细信息,请参阅我的 上一篇文章

入门

安装 PowerShell 4.0 预览版

PowerShell 是 Windows 管理框架 4.0 (WMF) 的一部分,可以 在此处 下载。

细心的读者可能会发现,没有提供 Windows 8 的下载。为什么?

Microsoft 预计所有 Windows 8 用户都会升级到 Windows 8.1。Windows 8.1 将包含 WMF 4.0。

在安装 WMF 4.0 预览版之前,必须安装 .NET Framework 4.5!如果未安装 .NET Framework 4.5,令人惊讶的是,WMF4 会报告它已安装,这当然是错误的。

请注意上面的链接,因为 Management Framework 4.0 预览版与某些 Microsoft 服务器应用程序不兼容,包括所有版本的 Exchange Server、SharePoint Server 和其他应用程序。

  • System Center 2012 Configuration Manager (不包括 SP1)
  • System Center Virtual Machine Manager 2008 R2 (包括 SP1)
  • Microsoft Exchange Server 2013、Microsoft Exchange Server 2010 和 Microsoft Exchange Server 2007
  • Microsoft SharePoint Server 2013 和 Microsoft SharePoint Server 2010
  • Windows Small Business Server 2011 和 Windows Small Business Server 2008

您实际上不应该在生产环境中安装预览版,而应该在本地工作站或笔记本电脑上使用它进行测试和熟悉。

PowerShell ISE 4.0

如果您使用 Microsoft 脚本编辑器,以下内容可能对您非常感兴趣……

Microsoft 已升级集成脚本环境以支持

  • Windows PowerShell Workflow 调试和远程脚本调试。
  • Windows PowerShell 期望状态配置提供程序和配置的 IntelliSense。

有什么已更新?

除了某些 bug 修复和新添加的 DSC 功能外,Microsoft 还更新了以下组件:

  • Windows PowerShell Web 访问
  • Windows PowerShell Web 服务 (Management OData IIS 扩展)
  • Windows PowerShell Workflow
  • Windows PowerShell 集成脚本环境 (ISE)
  • Windows Remote Management (WinRM)
  • Windows Management Instrumentation (WMI)

有什么新功能?

请注意版权字符串中更改的日期(即 2013 年)。

Microsoft 照例更新了版本 strings。

除了版本信息,还有什么新内容?

期望状态配置是我们将在下一节中介绍的唯一一项重要新功能。

期望状态配置

一个特别激动人心的发展是“期望状态配置”(DSC),其配置的工作方式非常像 PowerShell 函数。DSC 是一种用于配置本地和远程计算机的新方法。您可以使用新的 configuration 关键字,该关键字的工作方式与 PowerShell 函数非常相似,而不是编写大量脚本代码。这些配置功能称为“块”,可以使用它们来添加或删除注册表项、文件和文件夹、本地用户和组以及 Windows 功能(用于服务器)。

概述

实际工作是在其中完成的,例如使用称为“group”、“service”或“registry”的DSC 资源。DSC 随附的资源完整列表可以在此处找到

每个资源在技术上都由一个DSC 提供程序表示,您可以去访问它。

C:\Windows\System32\WindowsPowerShell\v1.0\Modules\PSDesiredStateConfiguration\PSProviders

注意:DSC 提供程序本质上就是 PowerShell 模块。

下面将介绍可用的资源:

Archive Resource (存档资源)

Archive 资源提供了一种机制,用于在特定路径解压缩存档(.zip)文件。

Archive ArchiveExample
{ 
   Ensure ="Present" # You can also set Ensure to "Absent"
   Path="C:\Users\Public\Documents\Test.zip"
   Destination ="C:\Users\Public\Documents\ExtractionPath"
}

Registry Resource (注册表资源)

Registry 资源提供了一种管理注册表项和值的机制。

Registry RegistryExample
{
   Ensure ="Present" # You can also set Ensure to "Absent"
   Key ="HKEY_LOCAL_MACHINE\SOFTWARE\ExampleKey"
   ValueName="TestValue"
   ValueData="TestData"
}

Script Resource (脚本资源)

Script 资源提供了一种在目标节点上运行 Windows PowerShell 脚本块的机制。TestScript 块首先运行。如果它返回 False,则会运行 SetScript 块。调用 Get-DscConfiguration cmdlet 时(更多关于该 cmdlet 的信息请参见本页的另一面),会运行 GetScript 块。GetScript 必须返回一个哈希表。

Script ScriptExample
{
   SetScript={
      $sw=New-ObjectSystem.IO.StreamWriter("C:\TempFolder\TestFile.txt")
      $sw.WriteLine("Some sample string")
      $sw.Close()
   }
   TestScript ={Test-Path"C:\TempFolder\TestFile.txt"}
   GetScript={ <# This must return a hash table #>}
}

Package Resource (程序包资源)

Package 资源提供了一种在目标节点上安装和管理程序包(如 MSI 和 setup.exe 程序包)的机制。

Package PackageExample
{
   Ensure ="Present"# You can also set Ensure to "Absent"
   Path ="$Env:SystemDrive\TestFolder\TestProject.msi"
   Name ="TestPackage"
   ProductId ="663A8209-89E0-4C48-898B-53D73CA2C14B"
}

Environment Resource (环境变量资源)

Environment 资源提供了一种管理系统环境变量的机制。

Environment EnvironmentExample
{
   Ensure ="Present" # You can also set Ensure to "Absent"
   Name ="TestEnvironmentVariable"
   Value ="TestValue"
}

Group Resource (组资源)

Group 资源提供了一种管理目标节点上本地组的机制。

Group GroupExample
{
   # This will remove TestGroup,if present
   # To create a new group, set Ensure to "Present"
   Ensure ="Absent"
   GroupName="TestGroup"
}

User Resource (用户资源)

User 资源提供了一种管理目标节点上本地用户帐户的机制。

User UserExample
{
   Ensure ="Present"# To delete a user account, set Ensure to "Absent"
   UserName="SomeName"
   Password =$passwordCred# This needs to be a credential object
   Requires ="[Group]GroupExample"# Configures GroupExamplefirst
}

Service Resource (服务资源)

Service 资源提供了一种管理目标节点上服务的机制。

Service ServiceExample
{
   Name ="TermService"
   StartupType="Manual"
}

整合

创建配置文件

下面是示例配置文件。

Configuration MyTestConfig
{
    param ($MachineName)
    
    Node $MachineName
    {
        Group TestGroup
        {
            Ensure ="Present" 
            GroupName="TestGroup" 
        }
    
        Service WinUpdate
        {
            Name ="wuauserv" 
            StartupType="Automatic" 
        }
    
        Script ScriptExample
        {
            SetScript={
                    $sw=New-Object System.IO.StreamWriter("$env:temp\TestFile.txt")
                    $sw.WriteLine("Some sample string")
                    $sw.Close()
            }
    
            TestScript ={Test-Path "C:\Temp\TestFile.txt"}
            GetScript={ <# This must return a hash table #> }
         }
    
         Registry RegistryExample
         {
                Ensure ="Present" # You can also set Ensure to "Absent" 
                Key ="HKEY_LOCAL_MACHINE\SOFTWARE\ExampleKey" 
                ValueName="TestValue" 
                ValueData="TestData" 
         }  
 
         Environment EnvironmentExample
         {
             Ensure ="Present" # You can also set Ensure to "Absent" 
             Name ="TestEnvironmentVariable"
             Value ="TestValue" 
         } 
     } 
}

将配置转换为 MOF 文件

实际配置不是由您的脚本完成的。相反,您的脚本会获取配置数据(您的参数)并将其转换为 MOF 文件。以下两行代码说明了如何将上述配置转换为 MOF 文件:

$null = md C:\TEMP\dscconfig -ErrorAction SilentlyContinue
MyTestConfig -MachineName $env:COMPUTERNAME -OutputPath C:\TEMP\dscconfig 

生成的配置文件将存储为 {target node name}.MOF。如果您指定了多个计算机名称,将创建多个 MOF 文件 - 每个 MOF 文件代表一个目标节点。您的 MOF 文件将与下面列出的文件类似(在本例中,目标节点名称为 'DEVENV'):

/*
@TargetNode='DEVENV'
@GeneratedBy=Administrator
@GenerationDate=07/29/2013 09:07:05
@GenerationHost=DEVENV
*/
 
instance of MSFT_GroupResource as $MSFT_GroupResource1ref
{
ResourceID = "[Group]TestGroup";
 Ensure = "Present";
 GroupName = "TestGroup";
 SourceInfo = "::6::9::Group";
 ModuleName = "MSFT_GroupResource";
 ModuleVersion = "1.0";
 Requires = {
};
 
};
 
instance of MSFT_ServiceResource as $MSFT_ServiceResource1ref
{
ResourceID = "[Service]WinUpdate";
 SourceInfo = "::11::9::Service";
 Name = "wuauserv";
 StartupType = "Automatic";
 ModuleName = "MSFT_ServiceResource";
 ModuleVersion = "1.0";
 Requires = {
};
 
};
 
instance of MSFT_ScriptResource as $MSFT_ScriptResource1ref
{
ResourceID = "[Script]ScriptExample";
 GetScript = " <# This must return a hash table #> ";
 TestScript = "Test-Path \"C:\\Temp\\TestFile.txt\"";
 SourceInfo = "::16::9::Script";
 SetScript = "\n                    $sw=New-Object System.IO.StreamWriter(
   \"$env:temp\\TestFile.txt\")\n                    $sw.WriteLine(
   \"Some sample string\")\n                    $sw.Close()
   \n            ";
 ModuleName = "MSFT_ScriptResource";
 ModuleVersion = "1.0";
 Requires = {
};
 
};
 
instance of MSFT_RegistryResource as $MSFT_RegistryResource1ref
{
ResourceID = "[Registry]RegistryExample";
 ValueName = "TestValue";
 Key = "HKEY_LOCAL_MACHINE\\SOFTWARE\\ExampleKey";
 Ensure = "Present";
 SourceInfo = "::26::10::Registry";
 ModuleName = "MSFT_RegistryResource";
 ValueData = {
    "TestData"
};
 ModuleVersion = "1.0";
 Requires = {
};
 
};
 
instance of MSFT_EnvironmentResource as $MSFT_EnvironmentResource1ref
{
ResourceID = "[Environment]EnvironmentExample";
 Ensure = "Present";
 Value = "TestValue";
 SourceInfo = "::33::10::Environment";
 Name = "TestEnvironmentVariable";
 ModuleName = "MSFT_EnvironmentResource";
 ModuleVersion = "1.0";
 Requires = {
};
 
};
 
instance of OMI_ConfigurationDocument
{
 Version="1.0.0";
 Author="Administrator";
 GenerationDate="07/29/2013 09:07:05";
 GenerationHost="DEVENV";
};

应用 MOF 文件

调用 Start-DscConfiguration 将在目标计算机上调用 DSC 引擎。实际工作由 DSC 资源(即 PowerShell 模块)完成。

参数

Path 表示 MOF 文件所在的目录。

Wait 使 DSC 资源的执行在后台运行,即一个交互式进程。

Start-DscConfiguration -Wait -Path C:\TEMP\dscconfig

结果

在目标计算机上已按预期执行了我们 PowerShell 测试配置文件中配置的每一步。例如,我们按预期创建了包括值和数据的注册表项。

链接

© . All rights reserved.