PowerShell作业与高级函数实战

内容分享2天前发布
0 0 0

table {
border-collapse: collapse;
width: 100%;
margin-bottom: 1rem;
}
th, td {
border: 1px solid #ddd;
padding: 8px;
text-align: left;
}
th {
background-color: #f2f2f2;
}
tr:nth-child(even) {
background-color: #f9f9f9;
}
pre {
background-color: #f8f8f8;
padding: 15px;
border-radius: 4px;
overflow-x: auto;
}

40、在创建和接收 Windows PowerShell 作业练习中,按步骤完成以下操作:1. 以非提升用户身份打开 Windows PowerShell 控制台;2. 启动一个名为 gps 的作业,使用 – ScriptBlock 参数调用 Get – Process cmdlet;3. 检查启动作业的输出;4. 使用 Get – Job cmdlet 确定作业是否完成;5. 检查上一个命令的输出;6. 使用 Receive – Job cmdlet 接收作业结果;7. 按向上箭头键检索 Get – Job 命令并运行;8. 创建一个与上一个作业同名的新作业,将 – ScriptBlock 参数值更改为 gsv;9. 使用 Get – Job cmdlet 检索名为 gps 的作业;10. 使用 Receive – Job cmdlet 检索新作业的作业 ID,使用 – Keep 开关参数;11. 使用 Get – Job cmdlet 检索作业。

以非提升用户身份打开 Windows PowerShell 控制台;

执行命令:

Start -Job -Name gps -ScriptBlock {gps}

查看命令输出的作业名称、状态等信息;

执行命令:

Get -Job gps

查看输出判断作业是否完成及是否有数据;

执行命令:

Receive -Job gps

按向上箭头键找到

Get -Job

命令并回车运行;

执行命令:

Start -Job -Name gps -ScriptBlock {gsv}

执行命令:

Get -Job -Name gps

先使用

Get -Job

确定新作业 ID,再执行命令:

Receive -Job -Id <新作业 ID> -Keep

执行命令:

Get -Job -Id <作业 ID>

(这里作业 ID 需根据实际情况填写)。

41、修改脚本以删除之前创建的10个文件夹。

可使用PowerShell中的

Remove-Item

命令结合循环删除文件夹,示例代码如下:


for ($i = 1; $i -le 10; $i++) {
    $folderPath = "C:path	ofolder$i" # 修改为实际路径
    if (Test-Path $folderPath) {
        Remove-Item -Path $folderPath -Recurse -Force
    }
}

上述代码假设文件夹路径为

C:path ofolder1


C:path ofolder10

,可根据实际情况修改路径。使用

-Recurse

参数递归删除文件夹及其内容,

-Force

参数强制删除,即使文件夹不为空或有只读属性。

42、启动Windows PowerShell ISE。

启动Windows PowerShell ISE有以下几种方式:

在Windows Server 2012的开始页面中,输入PowerShell,Windows PowerShell和Windows PowerShell ISE会作为搜索结果出现;在Windows 10中,需输入

PowerShell_ISE

来查找。

按住Shift键并右键单击桌面任务栏上的Windows PowerShell图标,从弹出的任务菜单中选择启动Windows PowerShell ISE;也可右键单击Windows PowerShell图标,从出现的任务菜单中选择“打开”或“以管理员身份运行”。

在Windows PowerShell控制台内,输入

ise

来启动。

43、使用Get – Verb cmdlet获取已批准动词的列表。

在 PowerShell 命令行中输入

Get-Verb

即可获取已批准动词的列表。

示例:


PS C:> Get-Verb

44、为一个按文件最后修改日期获取文件列表的函数选择一个合适的动词。在这种情况下,合适的动词是Get,判断该说法是否正确。

从按文件最后修改日期获取文件列表这一功能来看,选择动词

“Get”

是合适的,因为

“Get”

通常用于表示获取、检索的意思,与获取文件列表的操作相契合。

45、创建一个名为 Get-FilesByDate 的新函数,该函数接收文件类型数组、月份、年份和文件路径数组作为参数,其中月份、年份和路径参数为必选,文件类型有默认值。函数的功能是递归搜索指定路径下符合指定文件类型的文件,并筛选出文件最后写入时间的月份和年份与传入的月份和年份相等的文件。

以下是创建该函数的步骤及函数代码:

定义函数参数,包括文件类型数组、月份、年份和文件路径数组,其中月份、年份和路径参数设为必选,文件类型有默认值。

在函数体中,使用

Get-ChildItem

进行递归搜索,搜索路径由

$path

变量指定,只包含

$fileTypes

变量指定的文件类型。

使用

Where-Object

子句筛选出文件最后写入时间的月份和年份与命令行提供的月份和年份相等的文件。

函数代码如下:


Function Get-FilesByDate {
    Param(
        [string[]]$fileTypes = @('.DOC','.DOCX'),
        [Parameter(Mandatory=$true)]
        [int]$month,
        [Parameter(Mandatory=$true)]
        [int]$year,
        [Parameter(Mandatory=$true)]
        [string[]]$path
    )

    Get-ChildItem -Path $path -Include $fileTypes -Recurse | 
    Where-Object { $_.LastWriteTime.Month -eq $month -AND $_.LastWriteTime.Year -eq $year }
}
#end function Get-FilesByDate

46、为该函数添加四个命令行参数。第一个参数是文件类型数组,第二个参数是月份,第三个参数是年份,最后一个参数是文件路径数组。

在函数的

Param

部分添加如下代码:


Param(
    [string[]]$fileTypes,
    [int]$month,
    [int]$year,
    [string[]]$path
)

47、在函数的参数部分之后,添加代码以对通过 $path 变量提供的路径进行递归搜索。将搜索范围限制为仅包含通过 $filetypes 变量提供的文件类型。


Get-ChildItem -Path $path -Include $filetypes -Recurse |

48、添加一个 Where – Object 子句,将返回的文件限制为 LastWriteTime 属性的月份等于通过命令行提供的月份,并且年份等于通过命令行提供的年份。


Where-Object { $_.LastWriteTime.Month -eq $month -and $_.LastWriteTime.Year -eq $year }

49、在Windows PowerShell ISE中运行包含该函数的脚本。

打开Windows PowerShell ISE。

创建一个名为

my - function

的函数,函数内容如下,将该函数保存到名为

my - function.ps1

的文件中:


Function my - function {
    Param(
        [int]$a,
        [int]$b
    )
    "$a plus $b equals four"
}

选择代码行

"$a plus $b equals four"

从“调试”菜单中选择“切换断点”,该行代码颜色应改变,表明已在该行设置断点。

运行

my - function.ps1

脚本,将函数加载到内存中。

在Windows PowerShell ISE的底部窗格(命令窗格)中输入函数名以执行该函数(可使用制表符扩展避免输入完整的函数名称)。

在Windows PowerShell ISE的输出窗格中,会发现已命中断点,检查输出并确定断点所在的行,输出窗格中的行号与脚本窗格(上部窗格)中的行号相对应。

检查Windows PowerShell ISE命令窗格中的提示符,它应以

[DBG]

为前缀,表明处于调试模式。

50、在命令面板中调用Get – FilesByDate函数,并为其提供合适的参数,请给出类似的命令行示例。

在命令面板调用

Get-FilesByDate

函数时,可使用类似以下格式的命令行:


Get-FilesByDate -fileTypes *.docx -month 5 -year 2012 -path c:data

可根据实际需求修改以下参数:

fileTypes

:文件类型(如

*.docx


*.txt

等)

month

:月份(1-12)

year

:年份(如 2012)

path

:目标路径(如

c:data

51、打开之前练习中创建的 Get – FilesByDate.ps1 脚本,并使用 Windows PowerShell ISE 的“另存为”功能将该文件另存为 Get – FilesByDateV2.ps1。

打开之前练习中创建的

Get-FilesByDate.ps1

脚本,并使用 Windows PowerShell ISE 的“另存为”功能将该文件另存为

Get-FilesByDateV2.ps1

52、为$filetypes输入变量创建一个默认文件类型数组。将文件类型数组分配给$filetypes输入变量。创建文件类型数组时使用数组表示法。对于本练习,使用

.doc和

.docx。

[string[]]$filetypes = @(“

.doc”,”

.docx”)

53、使用 [Parameter(Mandatory=$true)] 参数标签将 $month 参数设为必需参数。对 $year 和 $path 参数也进行同样的操作。

在脚本的

param

部分,将该标签置于输入参数上方,修改后的

param

部分如下:


param (
    [Parameter(Mandatory=$true)]
    [int]$month,

    [Parameter(Mandatory=$true)]
    [int]$year,

    [Parameter(Mandatory=$true)]
    [string[]]$path
)

54、保存并运行该函数。调用函数时不指定路径的值。此时会出现一个输入框,提示你输入一个路径。输入你系统上的单个路径,然后按回车键。由于函数的$path参数接受一个数组,会出现第二个提示,此时只需第二次按回车键。以下是一个合适的命令行示例:Get – FilesByDate – month 10 – year 2011 。请描述整个操作过程。

操作说明

此步骤指导你保存并运行函数。在调用函数时不指定路径,会弹出输入框让你输入路径:

输入单个路径后按回车;

因路径参数接受数组,会有第二个提示;

再次按回车即可。

示例命令行


Get-FilesByDate -month 10 -year 2011

55、请写出运行一个名为 Get – FilesByDate 的函数,指定月份为 10、年份为 2011 以及路径为 c:data 的合适命令行。


Get - FilesByDate - month 10 - year 2011 - path c:data

56、现在运行该函数并查找不同的文件类型。在以下示例中,我查找的是 Microsoft Excel 文档。命令为 Get – FilesByDate – month 10 – year 2011 – path c:data – fileTypes

.xlsx,

.xls ,请说明此命令的作用。

此命令用于调用

Get-FilesByDate

函数,查找 2011 年 10 月在

c:data

路径下,文件类型为

*.xlsx


*.xls

的文件。

57、在创建高级函数的练习中:1. 启动 Windows PowerShell ISE;2. 使用 Windows PowerShell ISE 中的 cmdlet(高级函数)代码片段创建高级函数的基本框架;3. 将基于注释的帮助从函数体外部移动到函数体内部;4. 将函数名称从 Verb – Noun 更改为 Get – MyBios;5. 修改基于注释的帮助,填写摘要、描述和示例参数,为参数添加注释;6. 添加 #requires 语句并要求 Windows PowerShell 版本 5.0;7. 修改参数名称为 computername,添加别名属性值为 cn,配置参数属性 ValueFromPipeline 和 ParameterSetName,将 computername 参数限制为字符串;8. 从代码片段中删除 begin 和 end 语句;9. 在 Process 脚本块中添加一个 Switch 语句,根据 $PSCmdlet.ParameterSetName 进行评估,若为 remote 则使用 Get – CimInstance cmdlet 的 – ClassName 和 – ComputerName 参数,默认不使用 – ComputerName 参数查询 Get – CimInstance cmdlet;10. 将高级函数保存为 Get – MyBios.ps1 到一个易访问的文件夹;11. 在 Windows PowerShell ISE 中运行该函数;12. 在命令面板中,不带参数调用 Get – MyBios 函数;13. 现在使用 – cn 别名和远程计算机的名称调用 Get – MyBios 函数;14. 使用 help 查看高级函数的完整帮助。

练习说明

此练习详细描述了创建高级函数的步骤,包括以下操作:

启动工具

构建框架

修改函数名称和注释

配置参数

添加特定语句

保存函数

运行函数

查看帮助

目标

通过一系列操作,创建一个名为

Get-MyBios

的高级函数,并对其进行测试和查看帮助信息。

58、请描述创建和安装一个名为 mybios 的 PowerShell 模块的详细步骤,该模块包含 Get – MyBios 函数,并实现别名设置、模块导出、导入以及使用该函数获取信息等操作。

该描述为创建和安装模块的详细步骤,具体操作步骤如下:

启动 Windows PowerShell ISE。

打开上一个练习创建的

Get-MyBios.ps1

文件,将内容复制到空的 Windows PowerShell ISE 脚本窗格。

指定

.psm1

文件扩展名,将新复制代码保存为名为

mybios.psm1

的模块,通过文件菜单“另存为”保存到方便位置。


mybios.psm1

文件里,

Get-MyBios

函数脚本块结束后,使用命令

New-Alias -Name gmb -Value Get-MyBios

创建名为

gmb

的别名,值为

Get-MyBios

在脚本中添加命令

Export-ModuleMember -Function * -Alias *

,导出

mybios

模块的所有别名和函数。

保存更改并关闭模块文件。

使用

Copy-Modules

脚本在当前用户目录创建名为

mybios

的模块文件夹,并将模块复制到该位置。

打开 Windows PowerShell 控制台,使用命令

Import-Module mybios

导入

mybios

模块。

使用

Get-MyBios

高级函数返回当前计算机的 BIOS 信息。

使用命令

help Get-MyBios -full

从高级函数中检索完整帮助信息。

将远程计算机名称通过管道传递给

Get-MyBios

高级函数。

59、1. 启动 Windows PowerShell ISE。2. 使用命令插件搜索与 WMI 相关的 cmdlet。3. 从列表中选择 Invoke – WmiMethod cmdlet。4. 在类块中,添加 WMI 类名 Win32_Process。5. 在名称块中,输入方法名 create。6. 在参数列表中,输入 notepad。7. 点击运行按钮。8. 通过在参数列表中添加 calc 来修改 ArgumentList 块,使用分号分隔参数。9. 再次点击运行按钮以执行修订后的命令。10. 在命令插件中,查找名称中包含“process”的 cmdlet,从 cmdlet 列表中选择 Stop – Process cmdlet。11. 在 Stop – Process 块的参数中选择名称参数集。12. 在名称框中,输入 notepad 和 calc。13. 点击运行按钮以执行命令。14. 在显示与进程相关的 cmdlet 的名称块下,选择 Get – Process cmdlet。15. 在名称参数集中,输入 calc、notepad。16. 点击运行按钮以执行命令。

操作步骤说明

此为一系列操作步骤,旨在通过 Windows PowerShell ISE 执行一系列与进程管理相关的命令,包括创建、停止和获取进程信息等操作。

60、1. 启动 Windows PowerShell ISE。2. 关闭命令加载项。3. 显示脚本窗格。4. 使用 Get – WmiObject cmdlet 从本地主机检索进程对象列表。将返回的进程对象存储在名为 $process 的变量中。5. 使用 foreach 代码片段遍历存储在 $process 变量中的进程对象集合。6. 将 foreach 代码片段中的 $collection 变量更改为 $process。7. 在 foreach 代码片段的脚本块部分,使用 $item 变量显示每个进程对象的名称。8. 通过点击工具栏上的绿色三角形或按 F5 运行代码。

以下是具体步骤的中文描述:

启动 Windows PowerShell ISE。

关闭命令加载项。

显示脚本窗格。

使用

Get-WmiObject

cmdlet 从本地主机获取进程对象列表,将返回的进程对象存于

$process

变量,完整命令为:

powershell
$process = Get-WmiObject -Class win32_process

输入命令时可利用 IntelliSense 减少输入。



Ctrl + J

启动代码片段,输入

f

快速移至“F”部分,可输入

fore

后按

Enter

或在“F”部分用向下箭头键选择

foreach

代码片段。


$process

变量复制到

$collection

变量处,具体操作是双击

$process

选名词部分(不选美元符号),按

Ctrl + C

复制,双击

$collection

后按

Ctrl + V

粘贴。


foreach

代码片段的脚本块内使用

$item.name

显示每个进程对象的名称。

点击工具栏绿色三角形或按

F5

运行代码,完整代码为:

powershell
$process = Get-WmiObject -Class win32_process
foreach ($item in $process) {
$item.name
}

61、启动Windows PowerShell控制台。使用Test – Path cmdlet确定是否存在Windows PowerShell控制台配置文件。如果存在配置文件,使用Copy – Item cmdlet创建配置文件的备份副本。使用Remove – Item cmdlet删除现有的$profile文件。使用Test – Path cmdlet确保$profile文件已正确删除。使用New – Item cmdlet创建新的Windows PowerShell控制台配置文件。在Windows PowerShell ISE中打开Windows PowerShell控制台配置文件。创建一个名为Set – Profile的函数,该函数在Windows PowerShell ISE中打开当前用户、当前主机的Windows PowerShell配置文件进行编辑。将Windows PowerShell代码添加到Set – Profile函数中,以在Windows PowerShell ISE中打开配置文件进行编辑。保存新修改的配置文件并关闭Windows PowerShell ISE。关闭Windows PowerShell控制台。打开Windows PowerShell控制台并查找错误。通过在Windows PowerShell控制台中输入命令来测试Set – Profile函数。

启动Windows PowerShell控制台。

使用以下命令确定是否存在Windows PowerShell控制台配置文件:

powershell
Test -Path $PROFILE

若配置文件存在,使用以下命令创建备份副本:

powershell
Copy -Item $profile c:fsoprofileBackUp.ps1

使用以下命令删除现有的

$profile

文件:

powershell
Remove -Item $PROFILE

使用以下命令确保

$profile

文件已正确删除:

powershell
Test -Path $PROFILE

使用以下命令创建新的Windows PowerShell控制台配置文件:

powershell
New -Item $PROFILE -ItemType file -Force

使用以下命令在Windows PowerShell ISE中打开配置文件:

powershell
Ise $profile

创建

Set-Profile

函数:

powershell
Function Set-Profile {}


Set-Profile

函数中添加以下代码以在Windows PowerShell ISE中打开配置文件进行编辑:

powershell
ISE $profile

保存新修改的配置文件并关闭Windows PowerShell ISE。

关闭Windows PowerShell控制台。

打开Windows PowerShell控制台并查找错误。

在Windows PowerShell控制台中输入

Set-Profile

命令来测试该函数。

62、使用Sort – Object cmdlet对服务列表进行排序。为Sort – Object指定status属性。将Get – Service cmdlet的结果通过管道传递给Sort – Object cmdlet。使用Sort – Object cmdlet的sort别名以减少输入量。

Get – Service | sort – Property status

63、使用Get – Service cmdlet生成服务列表,然后按服务名称对生成的服务列表进行字母排序。可以使用Sort – Object cmdlet按名称属性对服务列表进行排序,也可以使用Sort – Object的别名sort,将Get – Service cmdlet返回的对象通过管道传递给Sort – Object(或其别名sort)。请写出实现该功能的命令。

Get-Service | sort -Property name

© 版权声明

相关文章

暂无评论

none
暂无评论...