 
 
以下章节介绍了 Windows PowerShell 的主要功能:
长时间运行的任务,如部署服务包或备份数据库等,需要在即使提出任务请求的客户端计算机关闭或断开的情况下继续进行。
通过健壮的会话连接功能,远程会话可以保持近四分钟的连接状态,及时客户端下线或无法访问,被管理的节点上的任务可以继续自主运行,使得端到端的系统更加可靠。如果连接无法在四分钟内被重新载入,在所管理的节点上的运行将会被暂停,远程会话的状态将会被自动地设置成为断开状态,使得他们能够在网络连接恢复之后可以重新载入任务,这一过程不会造成任何的数据丢失。应用程序崩溃和不可预料的客户端连接中断等意外断开的情况几乎被消除。
Windows PowerShell 3.0 支持任意会话的断开和重新连接,而不会丢失连接状态。Disconnected Sessions 功能支持在远程计算机上创建会话、启动命令行或作业、断开会话连接、关闭计算机、然后从不同的计算机上重新连接到会话,以检查作业的状态或获取作业执行的结果。当管理员从会话断开连接的时候,之前输入的命令和作业将会继续保持运行状态。
以下 cmdlet 演示了 Windows PowerShell 3.0 当中的 Disconnected Sessions 组件的功能:
示例:
# Start a remote session, disconnect from the session, and exit
PowerShell. PS C:\> $s = New-PSSession -ComputerName srv1 -Name
LongSession
PS C:\> $job = Invoke-Command $s { 1..10| % {echo "Long running job - part $_";
sleep 5} } -AsJob
PS C:\> Disconnect-
PSSession $s exit
# Start Windows PowerShell on a different computer.
PS C:\> $s = Get-PSSession -ComputerName srv1 -Name LongSession
PS C:\> Receive-PSSession $s
Windows PowerShell 3.0 允许管理员来调度作业在以后某个时间点运行,或者基于某个特定的作业调度计划。要创建一个被调度的作业,您首先需要创建一个作业描述,在作业描述中提供作业名称,并指定它所要运行的命令,然后指定一个作业启动触发器,这形成了作业调度时间表。Windows Task Scheduler 用以调度和启动作业,以用户为基准的作业注册库用以存储作业的输出,以供后续计算机上的 Windows PowerShell 会话调用。
PSScheduledJob 模块提供了以下 cmdlet,来帮助管理员来进行作业调度:
作业可以被设置成为通过以下作业触发器来触发。
示例:
$trigger = New-JobTrigger -Daily -At 4am
Register-ScheduledJob -Name MyScheduledJob -ScriptBlock { Get-Date } -Trigger
$trigger
Get-ScheduledJob
管理员可以手动启动调度的作业。
示例:
Start-Job -DefinitionName MyScheduledJob
一旦触发器没出发,并且作业处于运行状态,管理员可以像和其他常规后台作业一样管理作业。
示例:
Import-Module PSScheduledJob $j = Get-Job -Name MyScheduledJob Receive-Job $j
Windows PowerShell 集成脚本环境(ISE) 3.0 包含了很多新的功能来帮助 Windows PowerShell 新手快速上手,同时为脚本编辑者提供了领先的编辑支持。以下是这些新功能的一部分:
			 
 
		
			 
 
		
IT 专家经常通过执行长时运行的序列化任务或工作流来管理他们的多计算机环境,这可能会影响到同时在运行的多个受管理的计算机或设备。Windows PowerShell 工作流使得 IT 专家和开发人员可以从工作流当中收益,来使用 Windows PowerShell 的自动化功能。
工作流是一系列自动化的步骤或活动的序列,来执行任务或从一个或多个受管理的节点(计算机或设备)当中检索数据。这些活动可能包含单个的命令或脚本。Windows PowerShell 工作流使得 IT 专家和开发人员来编写多台计算机管理活动的序列—指那些长时间运行的、重复的、频繁的、并行的、可能中断的、可停止的、或可重启的任务—编写成为工作流。通过设计,工作流可以从计划内或意外停止或中断的地方被启动,如在网络中断、重启或断电的应用场景当中。工作流同时也便于携带,可以导出到 XML 或从 XML 当中导入。
自定义会话配置(也被称为终端)支持在一个工作流当中的工作流或活动通过委托或下级用户来运行。会话配置的安全描述决定了谁可以使用它们来创建会话,从而在工作流的不同阶段管理节点。
Windows PowerShell 工作流管理多台计算机任务的分发、序列化、和完成,将用户和管理员从日常管理任务当中解放出来以关注在更高级别的任务上。以下列表描述了 Windows PowerShell 工作流所带来的一系列好处:
此外,工作流作者可以指派特定的要运行的活动,以便在一个或多个所管理的节点上工作流失败(例如,一台计算机在活动运行的时候掉线)的情况下重新载入工作流。
从工作流断开连接,然后重新连接,重启所管理的节点而无需中断工作流。
通常,在以下列举的情况下,应该优先考虑使用工作流,而非 cmdlet:
通常情况下,工作流通过客户端计算机启动,而且对于执行跨多台目标计算机的长时间运行的任务而言,非常的适合。工作流就像任意其他的 PowerShell cmdlet 一样,这意味着您可以使用 Get-Command cmdlet来发现他们,使用 Get-Help cmdlet 来了解如何使用它们。它们还可以在网络中断,例如机器重启的情况下保持运行状态。
您可以添加工作流到 Windows PowerShell 会话当中,您可以在命令行当中输入命令,在一个脚本当中包含它,或者通过使用导入模块 cmdlet 来导入 Windows PowerShell 脚本工作流或基于 XAML 的工作流,接下来工作流将会像会话当中的任意 PowerShell cmdlet 一样运行。
工作流内部的每一步或命令被称为一个活动。每个活动继承了整个工作流的属性,包括前面提到的功能强大的工作流通用参数功能。
要编写一个工作流,您可以或者使用常规的 PowerShell 控制台或 Windows PowerShell ISE。例如,您可以输入以下工作流到 Windows PowerShell ISE Command 面板当中:
Workflow MyWorkflow
{
Write-Output -InputObject "Hello from Workflow!"
}
请注意新的“工作流”关键字,这指代命令是一个 Windows PowerShell 工作流。该关键字新增了 20 多个新的参数到工作流当中,允许用户指定如下的项目,例如:
要运行一个工作流,输入工作流的名称,正如你在 Windows PowerShell 当中执行任意命令的时候一样。例如,要运行一个我们刚刚创建的新的工作流,您只需在 Windows PowerShell 窗口当中输入 MyWorkflow 即可。
以下是工作流的另一个示例,叫做 LongWorkflow,要运行大概 30 秒。
Workflow LongWorkflow
{
Write-Output -InputObject "Loading some informATIon..." Start-Sleep -Seconds 10
Write-Output -InputObject "Performing some action..." Start-Sleep -Seconds 10
Write-Output -InputObject "Cleaning up..." Start-Sleep -Seconds 10
}
因为这个工作流定义了一个长时间任务,您可能需要以后台作业的方式运行它。要这样做,您可以使用AsJob 参数,同时带有 JobName 参数来为作业分配名为“LongWF”的名称。
LongWorkflow –AsJob –JobName LongWF
下面第三个例子是一个更为复杂的工作流,这个工作流完成了数据中心的安装,模拟了一个基础的数据中心的部署场景。有一系列领先的工作流步骤,在工作流的后面被注释掉了,如果您想要练习和学习更多,您可以参照这一部分。
<# This is a long running workflow that can be executed across multiple computers
running Windows Server to simulate a data center deployment.
This workflow showcases the new PowerShell Workflow feature set of Windows Server
2012. In this particular example, the managed nodes must be running
a Windows Server 2012 SKU because of the Get-WindowsFeature activity below. #>
Workflow Install-Datacenter {
Write-Output -InputObject "Let's get this Datacenter up and running!!!"
InlineScript {"Installing... " + (hostname); Start-Sleep -Seconds 2} -pscomputername
$pscomputername -pspersist:$TRUE Checkpoint-Workflow
Write-Output -InputObject "=== Suspend NOW!!! ===" Start-sleep -seconds 8
foreach -parallel ($computer in $pscomputername)
{
Sequence {
InlineScript { cd WSMan:\localhost\Client }
InlineScript { Set-Item AllowUnencrypted $TRUE -Force } InlineScript { Set-Item
TrustedHosts * -Force }
Start-Sleep -Seconds 2
Write-Output -InputObject "Done configuring WSMan"
}
# You could add an IF statement depending on the outcome of the following: Get-
WindowsFeature
# Let's simulate a long running task that can execute in parallel with WSMan
configurATIon
Start-Sleep -Seconds 10
Write-Output -InputObject "Time to get coffee, app setup about to start"
}
InlineScript { 1..30 | ForEach-Object `
-Begin
-Process { "
-End { "=== Datacenter Installation Complete ===`n" }`
{ "`n=== Installing Datacenter Applications ===" }`
Installing component $_..."; start-sleep -Seconds 2 }`
}` -PSComputerName $PSComputerName -PSPersist:$TRUE
# ADVANCED FEATURES YOU CAN TRY:
##################
# USE CASE 1:
##################
# Other things we could use workflows for: multiple, long running,
# pre-existing scripts that need to be executed across multiple machines
# and come together as a single end-to-end scenario. For 示例:
#
InlineScript { \\\InstallIIS.ps1 ; Start-Sleep -Seconds 10} -
PSComputerName $computer
#
InlineScript { \\\StartIIS.ps1
PSComputerName $computer
Restart-computer -ComputerName $pscomputername -wait -for
PowerShell
; Start-Sleep -Seconds 10} -
#
##################
# USE CASE 2:
##################
# Check for a condition (for example regkey set to value X) and if it's true,
suspend the workflow from within the workflow itself.
# This way, an admin can interact with the machine in question, resolve the
problem and then resume execution.
#
#
#
If () {
Suspend-Workflow
Write-Output -InputObject "ADMIN: Please fix theand
resume this workflow by running resume-job  
Windows Server 2012 包含了超过 2300 个 cmdlet,您可以快速地学习并掌握这些 cmdlet。功能模块比以往
更容易发现、查看、浏览、创建和使用,用户不再需要使用 cmdlet 手工导入。用户可以只运行一个cmdlet,Windows PowerShell 将会自动地导入这一模块。此外,Get-Command 也已经被升级,可以查看安装在系统当中的 cmdlet。例如,要查看所有的网络相关的 cmdlet,您可以运行 Get-Command *-Net*。
Windows PowerShell 3.0 为所有的 cmdlet 提供了简单的、一致的语法。ForEach-Object 和 Where-Object cmdlet 被更新以支持直观的命令结构,跟接近基于模型的语言。用户可以建立无脚本模块、括号、当前的对象的自动化变量($_),或者获得相应的属性和方法的运算符。总之,困扰初级用户的“标点符号”问题不再是问题。
Windows PowerShell 3.0 通过提供到 Windows PowerShell 社区生成的代码库的访问,即带有 Windows PowerShell ISE 的集成脚本片段(Integrated Script Snippets,ISS)来为 IT 专家提供帮助。要访问 ISS,用户需要按下组合键(CTRL+J),然后用户可以从一个脚本模板列表当中选择合适的模板,并将所有完成的脚本部分插入到编辑器当中,在默认的情况下,ISE 可以提供 12 个脚本片段,来辅助创建通常被使用的编程语法模型。
	 
 
Windows PowerShell 网络访问是 Windows Server 2012 当中提供的一个新的功能,使您能够使用 Windows PowerShell 通过 Web 浏览器来管理 Windows Server。您想管理的目标计算机可以运行任意版本的 Windows PowerShell 远程启用功能。
	 
 
要通过 Web 浏览器当中的 Windows PowerShell 来管理远程服务器,您可以连接到一个运行 WindowsServer 2012 的服务器,实现 Windows PowerShell 网络访问组件的安装。这一服务器作为一个网关,提供了包含 Windows PowerShell 接口的远程客户端页面。以下截图显示了基础架构:
	 
 
Windows PowerShell 2.0 包含了扩展的帮助信息,可以实现实时的在线更新,尽管帮助文件也是 Windows操作系统的一部分,但是用户无法更新,此外帮助命令行的帮助主题可能很快会过期。第三方产品的联机帮助可以转化成为 XML 或显示过时的帮助主题。
Windows PowerShell 3.0 新的 Update-Help 和 Save-Help cmdlet 为每个模块下载和安装最新的帮助文件。cmdlet 在互联网上查看每个帮助文件,确定他们是否比本地文件更新、拆分它们,并将它们安装到正确的位置当中。更新后的文件可立即通过 Get-Help 来进行使用—而无需重启 Windows PowerShell。Windows PowerShell 3.0 的帮助文件确保是最新的,因为它们不会进行转换。Get-Help 显示自主生成命令的帮助内容,从而可以使用 Update-Help cmdlet 来安装或更新模块的帮助文件。
对于某些环境,如 Internet 防火墙之后的大型企业,最好能够从本地共享当中来更新帮助文件,而不是从Internet 当中更新文件。在这种情况下,用户可以使用 Save-Help-DestinationPath来创建存储了最新的 Windows PowerShell 帮助文件。
组织内的用户可以通过指向共享和运行的 Update-Help–SourcePath来更新他们的帮助文件。
更新说明适用于所有模块,包括第三方模块,包括多国语言支持。
Windows PowerShell 简化了定义新的会话配置的流程,允许管理员以可声明的方式在 PowerShell 数据文件当中使用名称-值的方式来指定配置。对于大多数的设置,比写一个 PowerShell 脚本要简单的多,也更容易理解如何通过检查文件当中定义的会话配置。
一旦指派了远程管理任务,在执行过程中可能导致用户缺乏执行任务所需要的凭据。通过使用 Windows PowerShell 3.0,管理员可以配置默认的会话,从而可以在默认情况下根据不同的用户凭据来运行一系列的命令。凭据信息被安全地存储在 WSMan 服务当中。
例如,要修改在定期的 PowerShell 终端当中执行的命令的用户凭据,需要执行以下命令:
cd WSMan:\localhost\Plugin\microsoft.powershell $cred = Get-Credential Set-Item .\RunAsUser $cred
要想更改生效,必须要重启 Windows Remote Management(WinRM)服务。
Windows PowerShell 3.0 中新的$PSDefaultParameterValues 参考变量指定了 cmdlet 参数的默认值,用户可以为某个特定的 cmdlet 或一个符合卡描述的 cmdlet 组进行参数设置。
$PSDefaultParameterValues 是一个包含了一系列的键值的哈希表。每个参数每个键值包含由冒号分隔的命令名称和参数名称。命令行名称和/或参数名称包含了引号标记("CommandName":"ParameterName")。
要覆盖默认的参数值、添加明确的命令参数值,要禁用 Default Parameter Value 功能,输入以下键/值:"Disable=$true"。
默认情况下,$PSDefaultParameterValues 的值是基于特定的参数的。要将其设置成为支持 Windows PowerShell 会话,需要添加$PSDefaultParameterValues 变量到 Windows PowerShell 属性当中。
示例:
$PSDefaultParameterValues=@{Invoke-
Command:ConfigurationName="AdminSession.PowerShell";*-
Job:Verbose=$true} 
Windows PowerShell 3.0 包含了许多新的 cmdlet,扩大了它的管理功能和管理范畴以下是 Windows PowerShell 3.0 所包含的部分 cmdlet 列表:
| Get-CimAssociatedInstance | 关联Common Information Model(CIM)实例,并连接到特定的实例。 | 
| Get-CimClass | 支持用户在特定的命名空间当中枚举CIM类型的列表。 | 
| Register-CimIndicationEvent | 订阅指针以使用过滤器表达式或查询表达式。 | 
| Get/New/Remove/Set-CimInstance | 获得、创建、移除或编辑服务器上的CIM实例。对于Get-CimInstance,实例只包含了与Property参数、KeyOnly参数或Query参数的选择功能等相关的特定参数。 | 
| Invoke-CimMethod | 在CIM对象中调用方法。 | 
| Get/New/Remove-CimSession | 从客户端计算机上获得、创建或移除到远程计算机的CIM会话。 | 
| New-CimSessionOption | 创建CimSessionOption的实例,并被用作New-CimSession cmdlet的声明或定义。 | 
| Show-Command | 以Windows表单的方式展示图形化的cmdlet。 | 
| Rename-Computer | 重命名计算机。 | 
| Get/Show-ControlPanelitem | 通过控制面板获得安装在本地计算机上的应用程序的列表。Show-ControlPanelitem被用以加载控制面板应用程序。 | 
| Unblock-File | 移除ZoneTransfer修正NTFS流;例如,“从Internet下载”流。 | 
| Save/Update-Help | Save-Help导出当前安装的帮助文件到本地的文件系统当中。 Update-Help从Internet或文件共享当中下载帮助文件,并将其安装在本地的计算机上。 | 
| Resume/Suspend-Job | 中止或重载作业。这些cmdlet目前仅适用于工作流作业。 | 
| Add/Disable/Enable/Get/New/Rem | 使用定义了何时调度的作业要执行的作业触发器。 | 
| ConvertFrom/ConvertTo-Json | 将对象转换成为JSON格式的字符流或从JSON格式的字符流转换成为对象。 | 
| Connect/Disconnect/Receive- PSSession | 连接/断开远程会话连接。Receive-PSSession将会载入断开的会话的命令执行,并获得会话的输出结果(无影响地重新连接到会话)。 | 
| New/Test- | 创建或校验被用以创建受限制的终端的PSSession配置文件。 | 
| New-PSTransportOption | 创建新的PSTransportOption对象。 | 
| New-PSWorkflowExecutionOption | 定义被Register-PSSessionConfiguration使用的工作流终端配置的值。 | 
| Invoke-RestMethod | 发出HTTP或HTTPS请求到RESTful Web Service并返回响应。 | 
| Disable/Enable/Get/Register/Set/U | 在计算机上使用调度的作业。 | 
| Get/New/Set-ScheduledJobOption | 获得、创建或设置能被用以指定调度作业的高级设置的对象。 | 
| Get/Remove-TypeData | 获得或移除 TypeData。 | 
| Invoke-WebRequest | 创建HTTP或HTTPS请求到Web Service,并返回响应。 | 
| New-WinEvent | 在活动日志当中创建活动。 | 
总结
Windows PowerShell 3.0 为 Windows Server 提供了全面的、有弹性的、同时简单的自动化部署:
NAMS 组件要求以下先决条件:
要了解更多关于 IP 地址管理相关的信息,请参阅 Windows Server 2012 网络白皮书。
uc电脑园提供的技术方案或与您产品的实际情况有所差异,您需在完整阅读方案并知晓其提示风险的情况下谨慎操作,避免造成任何损失。
 
                        
未知的网友