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;
}
1、通过“开始|运行|Windows PowerShell”启动Windows PowerShell,PowerShell提示符默认是否会在“我的文档和设置”的根目录下打开?
该描述介绍了启动 Windows PowerShell 的一种方式,但 PowerShell 提示符默认不会在“我的文档和设置”的根目录下打开,通常默认是在用户的主目录下打开。
2、使用Get – ChildItem cmdlet的别名gci,获取根目录中包含的文件和文件夹列表。
在Windows PowerShell中可直接输入命令:gci
3、为了更快速地识别大文件,将输出通过管道传递给 Where-Object cmdlet,并指定 gt 参数的值为 1000 来评估长度属性。
gci | where-object {$_.length -gt 1000}
4、要清除 Windows PowerShell 窗口中的杂乱数据,请使用 cls 命令来清空屏幕。
这句话是正确的。在 Windows PowerShell 中,
cls
是
Clear-Host
命令的别名,使用
cls
命令可以清除当前 PowerShell 窗口中的显示内容。
5、使用Get – Alias cmdlet来解析cls别名所指向的cmdlet。
可以使用以下命令:gal cls
6、使用 Get – Alias cmdlet 来解析 mred 别名所指向的 cmdlet。
gal mred
7、使用Get – Member cmdlet从Get – ChildItem cmdlet中检索属性和方法列表。
在Windows PowerShell提示符下,输入
Get-ChildItem
cmdlet,后跟文件夹的路径,并将其通过管道传递给
Get-Member
cmdlet。
示例:
Get-ChildItem C: | Get-Member
8、检查输出结果,找出一个可以与 Where – Object cmdlet 配合使用的属性,以查找文件的修改日期。
LastWriteTime
9、使用向上箭头调出上一条命令。现在将Get – ChildItem cmdlet指向你硬盘上的特定文件夹,比如可以使用你机器上存在的任意文件夹。
在 Windows PowerShell 提示符下,使用向上箭头调出上一条命令,然后将命令中的目录指定为你想要的文件夹,例如:
get-childitem C:fso
10、再次使用向上箭头键调出上一条命令。给 Get – ChildItem cmdlet 添加 recurse 参数。如果之前的文件夹不是嵌套的,那么你可以更换到 Windows 文件夹(它是深度嵌套的)并执行添加 recurse 参数后的命令。
这是一个操作步骤说明,若要给出对应命令示例:
之前的命令为:
powershell
get-childitem "C:fso" | where-object { $_.LastWriteTime -gt "12/25/2006" }
添加
recurse
参数后为:
powershell
get-childitem -recurse "C:fso" | where-object { $_.LastWriteTime -gt "12/25/2006" }
若更换到 Windows 文件夹,命令可以是:
powershell
get-childitem -recurse "C:Windows" | where-object { $_.LastWriteTime -gt "12/25/2006" }
11、使用New – Object cmdlet创建wshNetwork对象的实例。使用comobject参数,并为其指定wshNetwork对象的程序ID,即“wscript.network”。将结果存储在名为$wshnetwork的变量中。
$wshnetwork = New-Object -ComObject "WScript.Network"
12、使用 wshNetwork 对象的 EnumPrinterConnections 方法打印出本地计算机上定义的打印机连接列表。为此,请使用 $wshnetwork 变量中包含的 wshNetwork 对象。
要实现此操作,对应的命令为
$wshnetwork.EnumPrinterConnections()
13、使用wshNetwork对象的EnumNetworkDrives方法打印出本地计算机上定义的网络连接列表。为此,请使用包含在$wshnetwork变量中的wshNetwork对象。
$wshnetwork.EnumNetworkDrives()
14、使用向上箭头两次,调出 $wshnetwork.EnumPrinterConnections() 命令。使用 $colPrinters 变量来保存该命令返回的打印机集合。
$colPrinters = $wshnetwork.EnumPrinterConnections()
15、使用Set – Location cmdlet切换到证书驱动器。
Set-Location cert: 或 Sl cert:
16、使用Get – ChildItem cmdlet列出机器上的所有证书。
Get-ChildItem -Path Cert: -Recurse
注:
GCI
是
Get-ChildItem
的别名,但仅写
GCI
无法准确列出机器上所有证书,需要指定路径并递归查询。这里使用
Cert:
作为证书存储路径并递归列出所有证书。
17、要确定计算机上是否安装了其他证书,请再次使用 Get-ChildItem cmdlet,但这次要指定 recurse 参数。使用向上箭头修改上一个命令。
使用向上箭头调出上一个
Get-ChildItem
命令,然后添加
-recurse
参数,命令为:
Get-ChildItem -recurse
18、使用New-PSDrive cmdlet创建一个到别名提供程序的驱动器映射。新的PSDrive名称为al,PSProvider为alias,根目录为点号(.)。
new-PSDrive -name al -PSProvider alias -Root .
19、将工作位置更改为你命名为 al 的新 PSDrive。为此,请使用 Set-Location cmdlet 的别名 sl。
SL al:
20、使用Get – ChildItem cmdlet的别名gci,并通过使用sort别名将结果对象导入Sort – Object cmdlet。指定name作为排序属性。
gci | sort -Property name
21、按照以下步骤创建10个文件夹:1. 打开记事本或你喜欢的Windows PowerShell脚本编辑器;2. 创建一个名为$intFolders的变量并赋值为10;3. 创建一个名为$intPad的变量,暂不赋值;4. 创建一个名为$i的变量并赋值为1;5. 使用New – Variable cmdlet创建一个名为strPrefix的变量,将其值设为”testFolder”并设为常量;6. 打开一个do … until语句并包含脚本块的左花括号;7. 开始一个if … else语句,条件是变量$i是否小于10;8. 打开if语句的脚本块,将变量$intPad赋值为0;9. 使用New – Item cmdlet在C:Mytest目录下创建新文件夹,文件夹名称由$strPrefix常量、$intPad变量的值和$i变量的值组成;10. 添加else子句;11. else脚本块与if脚本块类似,但名称中不包含$intPad变量的值;12. 将$i变量的值加1;13. 关闭else子句的脚本块并添加until语句,条件是$i变量是否等于$intFolders变量的值加1;14. 将脚本保存为yournameCreateMultipleFolders.ps1并运行。
以下是对应步骤的代码:
$intFolders = 10
$intPad
$i = 1
New-Variable -Name strPrefix -Value "testFolder" -Option constant
do {
if ($i -lt 10) {
$intPad = 0
New-Item -Path c:mytest -Name ($strPrefix + $intPad + $i) -ItemType Directory
} else {
New-Item -Path c:mytest -Name ($strPrefix + $i) -ItemType Directory
}
$i++
} until ($i -eq $intFolders + 1)
将上述代码保存为
yournameCreateMultipleFolders.ps1
并运行。
22、在 Windows PowerShell 提示符下,若要获取所有服务及其关联状态的列表,应使用什么命令?
在 Windows PowerShell 中,使用
Get-Service
命令可获取所有服务及其关联状态的列表。
23、使用Sort – Object cmdlet对服务列表进行排序。为Sort – Object指定状态属性。为此,将Get – Service cmdlet的结果通过管道传递给Sort – Object cmdlet。使用Sort – Object cmdlet的sort别名以减少输入量。
Get – Service | sort -property status
24、使用 Get-Service cmdlet 生成服务列表,然后按服务名称对生成的服务列表进行字母排序。可以使用 Sort-Object cmdlet 按名称属性对服务列表进行排序,也可使用 Sort-Object 的别名 sort 来实现。请写出使用 sort 别名实现此操作的命令。
Get-Service |sort -property name
25、使用Get – Service cmdlet生成服务列表。根据服务的名称和状态对返回的对象进行排序。
Get – Service | sort status, name
26、使用Get – Service cmdlet返回一个包含服务信息的对象。将结果对象通过管道传递给Where – Object cmdlet。在显示名称中查找“server”这个词。
Get-Service | Where-Object { $_.DisplayName -match "server" }
27、使用Get – Service cmdlet检索服务对象列表。将结果对象通过管道传递给Where – Object。使用等于参数返回一个表示Alerter服务的对象。
Get – Service | where {$_.name -eq “alerter”}
28、使用向上箭头调出之前检索警报器服务的命令。将结果对象存储在名为 $a 的变量中。
$a=Get-Service | where {$_.name -eq “alerter”}
29、将 $a 变量中包含的对象通过管道传递给 Get – Member cmdlet。你可以使用 gm 别名来简化输入。
$a | gm
30、使用 $a 变量中包含的对象,获取警报器服务的状态。
$a.status
31、如果警报器服务正在运行,则停止它。为此,请使用Stop – Service cmdlet。不要将$a变量中的对象通过管道传递,而是使用Stop – Service cmdlet的 – InputObject参数。
Stop – Service -InputObject $a
32、如果警报器服务已停止,需要使用 Start – Service cmdlet 来启动服务(原本停止服务用的是 Stop – Service cmdlet),并且要使用 – inputobject 参数将 $a 变量中包含的对象提供给该 cmdlet,写出对应的命令。
Start – Service – InputObject $a
33、查询 $a 变量中对象的状态属性,以确认警报器服务的状态是否发生了变化。
$a.status
34、如何打开记事本程序(Notepad.exe)或你喜欢的脚本编辑器?
在Windows PowerShell中,可通过输入
notepad
并按回车键来启动记事本程序(Notepad.exe)。
35、打开指定的脚本文件夹,找到 WmiTemplate.ps1 文件并打开,然后将其另存为 yournameWorkingWithPrinters.ps1。同时,在该脚本文件夹中找到 WorkingWithPrinters.ps1 脚本,以此作为本练习完整解决方案的示例。
按照要求从指定脚本文件夹打开
WmiTemplate.ps1
文件
将其另存为
yournameWorkingWithPrinters.ps1
并参考该文件夹里的
WorkingWithPrinters.ps1
脚本获取练习完整解决方案示例
36、修改 $wmiQuery 行以查询 WIN32_Printer 类。
将
$wmiQuery
行修改为:
$wmiQuery = "Select * from win32_printer"
37、修改脚本,使其仅打印出每台打印机的名称。为此,将 name 属性添加到 Format-List cmdlet 中。
使用如下代码:$objWMIServices | Format-List name
38、要确定每台打印机的定义位置,如何将 portname 属性添加到 Format-List cmdlet 中?
可使用如下代码实现:
$objWMIServices | Format-List name, portname
39、为了限制查询返回的特定数据,可以使用什么 WQL 技术?
可以按以下步骤使用 WQL 技术限制特定数据:
连接到 WMI;
使用
WMIQuery
参数中的
Select
语句选择感兴趣的特定属性,例如
Select name
;
使用
WMIQuery
参数中的
From
语句指定要从中检索数据的类,例如
From Win32_Share
;
在
WMIQuery
参数中添加
Where
子句以进一步限制返回的数据集,确保
Where
子句中指定的属性先在
Select
语句中提及,例如
Where name
;
添加评估运算符,可使用等号(
=
)、小于(
<
)或大于(
>
)符号,例如
Where name = 'C$'
。
40、在创建强大的Where子句时,可以使用哪三种可能的运算符?
等号(=)、大于号(>)和小于号(<)可用于在返回数据集之前评估数据。
41、1. 打开记事本或你喜欢的 Windows PowerShell 脚本编辑器。2. 使用 Get – Content 命令行工具打开 OneStepFurther.txt 文件,使用路径参数指向该文件的确切路径,并将创建的数组保存在名为 $aryText 的变量中。3. 创建一个名为 $strUser 的变量,该变量用于确定要在 Active Directory 中创建的对象类,将字符串 “user” 赋给该变量。4. 创建一个名为 $intUsers 的变量,该变量用于确定要创建的用户数量,在本练习中要创建九个用户,将整数 9 赋给该变量。
打开记事本或者你偏好的 Windows PowerShell 脚本编辑器。
运用
Get-Content
命令打开
OneStepFurther.txt
文件,利用路径参数指明该文件的精确路径,把生成的数组存于名为
$aryText
的变量里。
创建一个名为
$strUser
的变量,该变量用于确定在 Active Directory 中要创建的对象类别,给这个变量赋值字符串
"user"
。
创建一个名为
$intUsers
的变量,此变量用于确定要创建的用户数量,在本次练习中要创建 9 个用户,所以给该变量赋值整数
9
。
42、将你的脚本保存为yournameConfigureTransportLogging.ps1,运行该脚本,几秒钟后会看到提示返回但无输出。接着运行ReportTransportLogging.ps1脚本,若没看到日志记录级别发生变化,打开ConfigureTransportLogging.ps1脚本并与你的脚本进行比较。请简述此操作的整体流程。
此步骤描述了配置和检查 Exchange 2007 传输日志记录级别的操作流程:
先运行配置脚本。
再运行报告脚本。
若日志级别未改变,则对比配置脚本。
43、打开记事本或其他Windows PowerShell脚本编辑器。找到UserNames.txt文件,并确保你可以访问该文件的路径。在脚本的第一行,创建一个名为$aryUsers的变量,用于存储通过使用Get – Content cmdlet读取包含各种用户名字和姓氏的文本文件返回的文本数组。确保根据你的计算机编辑提供给Get – Content cmdlet的路径参数的字符串。在脚本的下一行,声明一个名为$password的变量,该变量将包含用于所有用户的密码。在脚本的下一行,声明一个名为$strOU的变量,用于保存要放置新创建用户的组织单位。在下一行,声明一个名为$strDomain的变量。此变量将用于保存组织的域名。现在声明一个名为$strDatabase的变量。此变量将保存用户邮箱所在的数据库的名称。使用ConvertTo – SecureString cmdlet将$password变量中包含的字符串转换为可用于New – Mailbox cmdlet的密码参数的安全字符串。使用ForEach语句遍历通过使用Get – Content cmdlet读取文本文件创建的文本数组。使用左右花括号打开和关闭代码块。在代码块的第一行,使用变量$newAry来保存通过使用Split方法从$aryUsers变量中的一行文本创建的新数组。检索名字并将其存储在变量$strFname中。检索姓氏并将其存储在变量$strLname中。使用New – Mailbox cmdlet并为每个参数提供值。将你的脚本保存为yournameCreateUsersFromTxt.ps1。运行你的脚本。如果它没有产生预期的结果,将其与CreateUsersFromTxt.ps1脚本进行比较。
这是一个使用Windows PowerShell创建用户账户的逐步操作说明,具体步骤及对应代码如下:
打开记事本或其他Windows PowerShell脚本编辑器。
找到
UserNames.txt
文件并确保可访问其路径。
在脚本第一行创建
$aryUsers
变量:
powershell
$aryUsers = Get-Content -path "c:ch9UserNames.txt"
(需根据实际情况修改路径)
声明
$password
变量:
powershell
$password = "Password01"
声明
$strOU
变量:
powershell
$strOU = "myTestOU"
声明
$strDomain
变量:
powershell
$strDomain = "nwtraders.msft"
声明
$strDatabase
变量:
powershell
$strDatabase = "Mailbox Database"
转换
$password
为安全字符串:
powershell
$password = ConvertTo-SecureString $password -asplaintext -force
使用
ForEach
语句:
powershell
foreach ($i in $aryUsers)
打开和关闭代码块:
powershell
{
}
在代码块第一行创建
$newAry
变量:
powershell
$newAry = $i.split(',')
检索名字:
powershell
$strFname = $newAry[0]
检索姓氏:
powershell
$strLname = $newAry[1]
使用
New-Mailbox
cmdlet:
powershell
New-Mailbox -Alias $strFname$strLname -Database $strDatabase -Name $strFname$strLname -OrganizationalUnit $strOU -FirstName $strFname -LastName $strLname -DisplayName $strFname$strLname -UserPrincipalName $strFname$strLname"@"$strDomain -password $password
保存脚本为
yournameCreateUsersFromTxt.ps1
并运行,若结果不符,与
CreateUsersFromTxt.ps1
脚本比较。
44、在 Windows PowerShell 中,声明一个名为 $dteMaxAge 的变量,并使用时间跨度加速器将字符串类型转换为时间跨度数据类型,将时间跨度设置为 30 天、0 小时、0 分钟和 0 秒。创建一个名为 $intSize 的变量,并使用它来保存值 50MB。使用变量 $strLogPath 来保存表示存储邮件跟踪日志路径的字符串。使用变量 $aryServer 来保存通过使用 Get – MailboxServer cmdlet 获取的 Exchange 邮箱服务器集合。使用 ForEach 语句遍历 $aryServer 变量中保存的 Exchange 服务器集合,在代码块中,使用变量 $strServer 来保存当前遍历对象的 Identity 属性。
以下是按照要求编写的代码:
# 声明 $dteMaxAge 变量并设置时间跨度为 30 天
$dteMaxAge = [timespan]"30.00:00:00"
# 创建 $intSize 变量并保存值 50MB
$intSize = 50MB
# 使用 $strLogPath 变量保存存储邮件跟踪日志的路径
$strLogPath = "c:x2kLogs"
# 使用 $aryServer 变量保存 Exchange 邮箱服务器集合
$aryServer = Get-MailboxServer
# 使用 ForEach 语句遍历服务器集合
foreach ($strServer in $aryServer) {
# 打开代码块
# 使用 $strServer 变量保存对象的 Identity 属性
$strServer = $strServer.Identity
# 关闭代码块
}