概述
本文档详细介绍了使用Windows PowerShell脚本技术在Deep Freeze企业控制台中创建自定义操作的过程


简介
Deep Freeze操作文件是一个XML文件,允许最终用户在Deep Freeze企业控制台中定义其他功能。操作文件定义了一种方法,用于调用外部命令或程序文件并传递一些特定于工作站的信息(例如,机器IP地址,计算机名称)。

本文档介绍了使用PowerShell脚本使用Deep Freeze Enterprise Console在所选工作站上远程启动远程命令或运行进程的示例。假设用户具有PowerShell脚本,XML语言以及Deep Freeze自定义操作XML语法的一些知识。有关自定义操作脚本的详细信息,请参阅Deep Freeze用户指南和技术文章。


配置环境和测试PowerShell脚本
为了能够使用Windows PowerShell远程命令,必须在目标Windows工作站上安装PowerShell并启用它。最近的Windows操作系统已经安装了PowerShell,但这些系统仍然可以在已禁用PowerShell的锁定配置中提供。

启用Windows PowerShell远程处理的最简单方法是在目标工作站上使用Enable-PSRemoting cmdlet。为此,请使用管理员权限启动Windows PowerShell并运行以下命令:

PS C:\> Enable-PSRemoting -Force

这将启用Windows Remoting服务(WinRM)并配置Windows防火墙,以便它可以接受同一域中的传入命令。混合域环境需要一些额外的配置才能使远程执行工作,这不在本文档的范围内。


测试PowerShell脚本
在将PowerShell脚本实现为自定义操作之前,最好自己运行脚本以确保其正常工作。在这种情况下,它可以更容易地解决脚本问题。

出于本文档的目的,我们将使用远程运行脚本的“Invoke-Command”。它具有以下语法:

Invoke-Command -computername [COMPUTER] -ScriptBlock { [COMMAND] }

其中[COMPUTER]是目标工作站计算机名称,[COMMAND]是一系列PoweShell命令。

为了在不启动PowerShell会话的情况下运行PowerShell命令,我们将使用以下命令:

powershell -Command "& { <list of PowerShell commands> ;}"

在下面的示例中,它显示了一个命令,该命令使用PowerShell脚本针对名为“Workstation1”的目标工作站远程运行IpConfig:

powershell -Command "& {Invoke-Command -computername Workstation1} -ScriptBlock {ipconfig /all; Start-Sleep -s 10};}"

此命令可以从Windows命令提示符窗口启动,并将显示目标工作站的完整IPConfig报告,并使命令提示符窗口保持打开状态10秒钟。

实现自定义操作以运行远程命令
成功测试上述脚本后,现在可以将其嵌入到<EXECUTE>标记内的自定义操作中,其中计算机名称将使用%% WKSNAME %%参数进行参数化,该参数与上下文相关。选定工作站。启动自定义操作后,Deep Freeze控制台将通过将%% WKSNAME %%参数替换为当前选定的工作站名称来构建实际命令:

<EXECUTE>powershell -Command & "{Invoke-Command -computername %%WKSNAME%% -ScriptBlock {ipconfig /all; Start-Sleep -s 10};}"</EXECUTE>

可以根据用户的要求实现一些其他自定义操作属性标记。以下是完整的自定义操作XML代码:

<ACTION#>

    <CAPTION>

       <ENGLISH>Get ipconfig info</ENGLISH>

       <GERMAN>Get ipconfig info</GERMAN>

       <JAPANESE>Get ipconfig info</JAPANESE>

       <SPANISH>Get ipconfig info</SPANISH>

       <FRENCH>Get ipconfig info</FRENCH>

       <CHINESE>Get ipconfig info</CHINESE>

       <PORTUGUESE>Get ipconfig info</PORTUGUESE>

    </CAPTION>

    <FILEMENU>Y</FILEMENU>

    <POPUPMENU>Y</POPUPMENU>

           <SILENT>Y</SILENT>

    <SUBITEMS/>

    <PARAMS/>

    <SYNC/>

    <LOG/>

    <EXECUTE>powershell -Command &amp; &quot;{Invoke-Command -computername %%WKSNAME%% -ScriptBlock {ipconfig /all; Start-Sleep -s 10};}&quot;</EXECUTE>

    <WORKDIR>C:\Windows\system32\</WORKDIR>

</ACTION#>

此代码段可以添加到现有的CustomActions.xml文件中,其中必须使用控制台自定义操作菜单中显示的实际操作数编辑<ACTION#>标记。

注意:在XML代码中,必须使用字符实体替换某些特殊字符,如上面的代码示例所示。

为了使新创建的自定义操作生效,必须重新启动Deep Freeze控制台。


实现自定义操作,提示用户输入远程命令
在前面的示例中,我们创建了一个特定的自定义操作来运行IPCconfig。这样,用户可以根据用户要求为每个特定命令创建无限数量的预定义自定义操作。

但是,如果自定义操作会提示用户输入要在所选工作站上运行的命令或程序,则可以提供更大的灵活性。为了实现这一点,该命令必须与XML文件内部参数化,类似于上述工作站名称。

在下面的XML代码示例中,我们重新编写了之前的PowerShell命令,该命令现在远程运行cmd命令,该命令又启动用户输入的由%CMD%参数表示的任何命令,脚本或可执行文件。

<ACTION#>
<CAPTION>
<ENGLISH>Push remote command using Powershell</ENGLISH>
<GERMAN>Push remote command using Powershell</GERMAN>
<JAPANESE>Push remote command using Powershell</JAPANESE>
<SPANISH>Push remote command using Powershell</SPANISH>
<FRENCH>Push remote command using Powershell</FRENCH>
<CHINESE>Push remote command using Powershell</CHINESE>
<PORTUGUESE>Push remote command using Powershell</PORTUGUESE>
</CAPTION>
<FILEMENU>Y</FILEMENU>
<POPUPMENU>Y</POPUPMENU>
<SILENT>Y</SILENT>
<SUBITEMS/>
<PARAMS>
<CMD>
<VAR>%CMD%</VAR>
<CAPTION>
<ENGLISH>Command</ENGLISH>
<GERMAN>Befehl</GERMAN>
<JAPANESE>ƒRƒ}ƒ“ƒh</JAPANESE>
<SPANISH>Comando</SPANISH>
<FRENCH>Commande</FRENCH>
<CHINESE>ÃüÁî</CHINESE>
<PORTUGUESE>Comando</PORTUGUESE>
</CAPTION>
</CMD>
</PARAMS>
<SYNC>N</SYNC>
<LOG/>
<EXECUTE>powershell -Command &quot;&amp; {Invoke-Command -computername %%WKSNAME%% -ScriptBlock {cmd /c %CMD%}&quot;</EXECUTE>
<WORKDIR>C:\Windows\system32\</WORKDIR>
</ACTION#>