PowerShell 4.0 - 有什么新内容?






4.71/5 (8投票s)
本文将向您介绍最新的 PowerShell 技术,例如新的或扩展的 cmdlet、期望状态配置、Windows 管理框架 4.0 等。
引言
在本文中,我们将探索一些能简化管理员或操作员工作的出色新功能。我们将展示期望状态配置等功能。新 cmdlet 和扩展 cmdlet 将得到演示。有关 PowerShell 内部机制 和 PowerShell 4.0 内部机制的详细信息,请参阅我的 上一篇文章。
入门
安装 PowerShell 4.0 预览版
PowerShell 是 Windows 管理框架 4.0 (WMF) 的一部分,可以 在此处 下载。
- Windows 7 SP1 (Windows6.1-KB2819745-x64-MultiPkg.msu)
- Windows 7 SP1 32 位 (Windows6.1-KB2819745-x86.msu)
- Windows Server 2008 R2 SP1 64 位 (Windows6.1-KB2819745-x64-MultiPkg.msu)
- Windows Server 2012 (Windows8-RT-KB2799888-x64.msu)
细心的读者可能会发现,没有提供 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 照例更新了版本 string
s。
除了版本信息,还有什么新内容?
期望状态配置是我们将在下一节中介绍的唯一一项重要新功能。
期望状态配置
一个特别激动人心的发展是“期望状态配置”(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 测试配置文件中配置的每一步。例如,我们按预期创建了包括值和数据的注册表项。