PowerShell命令与脚本操作指南

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 中获取帮助的操作步骤

1. **启动 PowerShell**  
   通过“开始 | 运行 | Windows PowerShell”启动,PowerShell 提示符默认将在“我的文档和设置”的根目录打开。

2. **获取 Get-Help cmdlet 的帮助**  
   - 使用 `Get-Help` cmdlet 获取关于 `Get-Help` cmdlet 的帮助:  
     ```
     get-help get-help
     ```
   - 要获取详细帮助:  
     ```
     get-help get-help -detailed
     ```
   - 要检索技术信息:  
     ```
     get-help get-help -full
     ```
   - 若只想获取命令使用示例列表:  
     ```
     get-help get-help -examples
     ```

3. **获取信息性帮助主题列表**  
   使用 `Get-Help` cmdlet 和带有星号(*)通配符的 `about` 名词:  
   ```
   get-help about*
   ```

4. **获取特定 cmdlet 相关的帮助主题列表**  
   - 获取所有与 `get` cmdlet 相关的帮助主题列表:  
     ```
     get-help get*
     ```
   - 获取所有与 `set` cmdlet 相关的帮助主题列表:  
     ```
     get-help set*
     ```

5. **退出 PowerShell**  
   通过输入 `exit` 并按回车键退出。

2、通过“开始 | 运行 | Windows PowerShell”启动 Windows PowerShell。PowerShell 提示符默认将在“Documents And Settings”的根目录打开,这种说法是否正确?

这种说法错误。在 Windows 系统中,使用“开始 | 运行 | Windows PowerShell”启动 Windows PowerShell 后,PowerShell 提示符默认打开的位置通常是当前用户的文档文件夹(如

C:Users用户名Documents

),而不是“Documents And Settings”的根目录。

“Documents And Settings”是 Windows XP 及更早版本中用于存储用户配置文件的目录,在 Windows Vista 及更高版本中已被“Users”目录所取代。

3、使用Get – Alias cmdlet检索计算机上定义的所有别名列表,并将此输出通过管道传递给Where – Object cmdlet,筛选出definition属性与Get – ChildItem cmdlet名称匹配的别名,写出对应的代码。

使用

Get-Alias

命令获取计算机上所有别名列表,再通过管道将结果传递给

Where-Object

命令,筛选出

definition

属性与

Get-ChildItem

命令匹配的别名。

示例代码为:


gal | Where-Object { $_.definition -match "get-childitem" }

4、使用Get – ChildItem cmdlet的别名gci,获取根目录中包含的文件和文件夹列表。示例如下:gci

使用命令gci可获取根目录中包含的文件和文件夹列表。

5、为了更快地识别大文件,如何利用管道和 Where – Object cmdlet 来筛选出长度大于 1000 的文件?请给出示例命令。

为了更快速地识别大文件,可将输出通过管道输送到

Where-Object

命令,指定大于(

-gt

)参数值为 1000 来评估文件长度属性,命令示例为:


gci | Where-Object { $_.Length -gt 1000 }

6、在 Windows PowerShell 中,要清除当前窗口中的杂乱数据应该使用什么命令?

在 Windows PowerShell 中,使用 cls 命令可以清除当前窗口的内容。

7、使用Get – Alias cmdlet来解析mred别名所指向的cmdlet。示例如下:gal mred

使用命令

gal mred

可解析

mred

别名所指向的 cmdlet。不过在大多数情况下,机器上可能未定义

mred

别名,此时会显示错误信息:


Get - Alias : Cannot find alias because alias 'mred' does not exist.

8、在相关操作环境中,如何实现清屏,示例是什么?

使用 Clear – Host 命令来清屏,示例如下:clear – host

9、如何使用Get – Member cmdlet从Get – ChildItem cmdlet检索属性和方法列表,请给出示例。

在Windows PowerShell中,可按以下步骤操作来获取属性列表:

在PowerShell提示符下,输入

get-childitem

命令,后面跟上文件夹路径。

通过管道符将其输出传递给

Get-Member

cmdlet。

使用

-membertype

参数指定值为

property

示例命令:


get-childitem C: | get-member -membertype property

若要获取方法列表,可使用:


get-childitem | get-member -membertype method

另外,也可以使用别名操作,例如:


gci | gm

10、检查输出结果,确定一个可以与 Where – Object cmdlet 一起使用的属性,以查找文件的修改日期。

LastWriteTime

11、请解释命令“get – childitem | where – object {$_.LastWriteTime}”的作用。

该命令用于筛选出具有

LastWriteTime

属性值的对象。它会获取当前目录下的所有项目(使用

Get-ChildItem

),然后使用

Where-Object

筛选出那些

LastWriteTime

属性有值的项目。

12、使用向上箭头调出上一条命令。现在将 Get-ChildItem cmdlet 指向你硬盘上的特定文件夹,例如 C:fso。此命令如下所示:get-childitem “C:fso”| where-object {$_.LastWriteTime -gt “12/25/2006”}。请说明如何操作。

使用向上箭头调出上一条命令后,可使用命令


get-childitem "C:fso" | where-object {$_.LastWriteTime -gt "12/25/2006"}

来将

Get-ChildItem

cmdlet 指向

C:fso

文件夹,也可将

C:fso

替换为机器上存在的其他文件夹路径。

13、再次使用向上箭头调出上一条命令,在Get – ChildItem cmdlet中添加recurse参数。若之前使用的文件夹没有嵌套,可更换为其他文件夹,如Windows文件夹。请给出一个使用该命令且包含筛选条件的示例。

再次使用向上箭头调出上一条命令,在

Get-ChildItem

命令后添加

-Recurse

参数。若之前文件夹无嵌套,可更换为其他文件夹,如 Windows 文件夹。

示例命令为:


Get-ChildItem -Recurse "d:vbsworkshop" | Where-Object { $_.LastWriteTime -gt "12/25/2006" }

该命令用于递归获取指定文件夹中最后写入时间晚于 2006 年 12 月 25 日的项目。

14、使用New – Object cmdlet创建wshNetwork对象的实例。使用comobject参数,并为其指定wshNetwork对象的程序ID,即“wscript.network”。将结果存储在名为$wshnetwork的变量中,写出对应的代码。

使用

New-Object

cmdlet 创建

WshNetwork

对象实例,指定

comobject

参数和程序 ID

"wscript.network"

,并将结果存于

$wshnetwork

变量,代码为:


$wshnetwork = New-Object -ComObject "wscript.network"

15、使用wshNetwork对象的EnumPrinterConnections方法打印出本地计算机上定义的打印机连接列表。已知$wshnetwork变量中包含了wshNetwork对象,写出对应的命令。

对应的命令是$wshnetwork.EnumPrinterConnections()

16、使用wshNetwork对象的EnumNetworkDrives方法打印出本地计算机上定义的网络连接列表。假设已将wshNetwork对象存储在$wshnetwork变量中,写出实现此操作的命令。

$wshnetwork.EnumNetworkDrives()

17、使用向上箭头两次,调出 $wshnetwork.EnumPrinterConnections() 命令。使用 $colPrinters 变量来保存该命令返回的打印机集合,请写出对应的代码。

使用

$colPrinters

变量保存

$wshnetwork.EnumPrinterConnections()

命令返回的打印机集合,代码为:


$colPrinters = $wshnetwork.EnumPrinterConnections()

18、启动Windows PowerShell。

使用“开始”|“运行”,输入“PowerShell”来启动 Windows PowerShell;或者使用“开始”|“运行”,输入“Windows PowerShell”来启动,PowerShell 提示符默认会在“Documents And Settings”的根目录打开。

19、使用Set – Location cmdlet切换到证书驱动器。

Set-Location cert:

20、要确定机器上是否安装了其他证书,如何使用 PowerShell 命令进行操作,并且利用向上箭头修改上一条命令?

要确定机器上是否安装了其他证书,可再次使用

Get-ChildItem

cmdlet 并指定

recurse

参数。使用向上箭头键调用上一条命令并添加

-recurse

参数,命令为:


Get-ChildItem -recurse

可简写成:


GCI -recurse

21、为了使列表更易于阅读,将输出通过管道传输到一个文本文件,然后在记事本中打开该文件。

在Windows PowerShell中,可以使用如下命令将输出传输到文本文件:


get-childitem C: | Out-File -FilePath C:output.txt

然后通过在命令行输入以下命令来用记事本打开该文件:


notepad C:output.txt

22、使用 New-PSDrive cmdlet 创建一个到别名提供程序的驱动器映射。新的 PSDrive 名称将为 al。PS 提供程序为 alias,根目录为点 (.)。

new-PSDrive -name al -PSProvider alias -Root .

23、将当前工作位置更改为名为 al 的新 PSDrive。为此,请使用 Set-Location cmdlet 的别名 sl。

SL al:

24、使用Get – ChildItem cmdlet的别名gci,并通过使用sort别名将结果对象管道传输到Sort – Object cmdlet。指定按name属性进行排序。

gci | sort -Property name

25、按照步骤在C:Mytest目录创建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变量中的0和$i变量中的数字组成;10. 添加else子句;11. 编写else脚本块,除了名称中不包含来自$intPad变量的0,其余与if脚本块相同;12. 将$i变量的值加1;13. 关闭else子句的脚本块并添加until语句,条件为$i变量是否等于$intFolders变量的值加1;14. 将脚本保存为yournameCreateMultipleFolders.ps1并运行。

以下是按照步骤编写的 PowerShell 脚本:


$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) -Type directory
    } else {
        New-Item -Path c:mytest -Name ($strPrefix + $i) -Type directory
    }
    $i++
} until ($i -eq $intFolders + 1)

将上述脚本保存为

yournameCreateMultipleFolders.ps1

并运行,即可在

C:Mytest

目录创建 10 个文件夹。

26、在Windows PowerShell提示符下,使用Get – Service cmdlet获取所有服务及其关联状态的列表,执行此操作的命令是什么?

在 Windows PowerShell 中,使用

Get-Service

命令可以获取所有服务及其关联状态的列表。

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

Get – Service | sort -property status

28、使用Get – Service cmdlet生成服务列表。按名称对生成的服务列表进行字母排序。为此,使用Sort – Object cmdlet按名称属性对服务列表进行排序。将Get – Service cmdlet返回的对象通过管道传递给Sort – Object cmdlet。

使用

Sort-Object

别名

sort

的命令为:


Get-Service | sort -property name

29、使用Get – Service cmdlet生成服务列表。根据服务的名称和状态对返回的对象进行排序。

Get – Service | sort status, name

30、使用Get – Service cmdlet返回一个包含服务信息的对象。将结果对象通过管道传递给Where – Object cmdlet,筛选出显示名称中包含“server”这个词的服务对象。


Get-Service | Where-Object { $_.DisplayName -match "server" }

31、使用 Get-Service cmdlet 检索服务对象列表。将结果对象通过管道传递给 Where-Object。使用等于参数返回一个表示 Alerter 服务的对象。

Get-Service | where {$_.name -eq “alerter”}

32、使用向上箭头调出之前检索警报器服务的命令。将结果对象存储在名为 $a 的变量中。

$a=Get-Service | where {$_.name -eq “alerter”}

33、将 $a 变量中包含的对象输送到 Get – Member cmdlet。你可以使用 gm 别名来简化输入。

$a | gm

34、使用$a变量中包含的对象,获取警报器服务的状态。

$a.status

35、如果警报器服务正在运行,则停止它。为此,请使用 Stop – Service cmdlet。不要将 $a 变量中的对象通过管道传递,而是使用 Stop – Service cmdlet 的 -inputobject 参数。

停止正在运行的警报器服务的代码为:Stop – Service -InputObject $a

36、如果警报器服务已停止,需要启动该服务,此时应使用 Start – Service cmdlet 而非 Stop – Service cmdlet。现在要使用 – inputobject 参数将 $a 变量中包含的对象提供给该 cmdlet 来启动服务,写出对应的命令。

Start – Service – InputObject $a

37、查询 $a 变量中对象的状态属性,以确认警报器服务的状态是否发生了变化。

$a.status

38、如何打开记事本程序(Notepad.exe)?

在 Windows PowerShell 中,可通过输入

notepad

并按回车键来启动记事本程序(Notepad.exe)。

39、打开名为WmiTemplate.ps1的文件,并将其另存为your – nameWorkingWithPrinters.ps1。

打开

WmiTemplate.ps1

文件,然后将其另存为

your-nameWorkingWithPrinters.ps1

40、修改$wmiQuery行以查询WIN32_Printer类。

将代码

$wmiQuery = "Select * from win32_product"

修改为

$wmiQuery = "Select * from win32_printer"

41、保存并运行脚本的具体操作是什么?


## 保存脚本
将脚本保存为 `yournameColorCodedServiceStatus.ps1`。若脚本未按预期运行,可将其与 `ColorCodedServiceStatus.ps1` 脚本进行比较。

## 运行脚本
- **在 PowerShell 内运行**:需输入脚本完整路径、脚本名称并确保包含 `.ps1` 扩展名。
- **在 PowerShell 外运行**:需输入脚本完整路径、脚本名称并确保包含 `.ps1` 扩展名,将其作为参数提供给 `PowerShell.exe` 程序,并使用 `-noexit` 参数在脚本执行后保留 PowerShell 控制台。

## 若无法运行脚本
- 使用 `Get-ExecutionPolicy` cmdlet 检查脚本执行策略。
- 若策略为 `Restricted`,可使用 `Set-ExecutionPolicy` cmdlet 将策略更改为 `RemoteSigned` 或 `Unrestricted`。

42、修改脚本,使其仅打印出每台打印机的名称。为此,将 name 属性添加到 Format – List cmdlet 中。

在脚本中添加代码 $objWMIServices | Format – List name 。

43、保存并运行一个PowerShell脚本的具体操作步骤是什么?


## 保存脚本
将脚本保存为 `yournameColorCodedServiceStatus.ps1`。若脚本未按预期工作,可将其与 `ColorCodedServiceStatus.ps1` 脚本进行比较。

## 运行脚本
- **若在 PowerShell 内运行**:
  - 需启用执行策略。
  - 输入脚本完整路径,包含脚本名称和 `.ps1` 扩展名。

- **若在 PowerShell 外运行**:
  - 输入脚本完整路径,包含脚本名称和 `.ps1` 扩展名。
  - 将其作为参数提供给 `PowerShell.exe` 程序。
  - 使用 `-noexit` 参数使脚本执行后 PowerShell 控制台保持打开。

## 若无法运行脚本
- 使用 `Get-ExecutionPolicy` cmdlet 检查脚本执行策略。
- 若策略为 `Restricted`,可使用 `Set-ExecutionPolicy` cmdlet 将策略更改为 `RemoteSigned` 或 `Unrestricted`。

44、要确定每台打印机的定义位置,如何将 portname 属性添加到 Format-List cmdlet 中?

可使用如下代码实现:


$objWMIServices | Format-List name, portname

45、为了限制查询返回的特定数据,可以使用什么 WQL 技术?

可以使用以下 WQL 技术来限制查询返回的特定数据:


WMIQuery

参数中使用

Select

语句选择感兴趣的特定属性,例如:

sql
Select name


WMIQuery

参数中使用

From

语句指定要从中检索数据的类,例如:

sql
From Win32_Share


WMIQuery

参数中添加

Where

子句以进一步限制返回的数据集,确保

Where

子句中指定的属性首先在

Select

语句中提及,例如:

sql
Where name

添加评估运算符,可使用等号(

=

)、小于(

<

)或大于(

>

)符号,例如:

sql
Where name = 'C$'

46、在创建强大的 Where 子句时,可以使用哪三种可能的运算符?

等号(=)、大于号(>)和小于号(<)

47、使用PowerShell脚本在Active Directory的NwTraders.msft域根目录下,根据指定文本文件中的名称创建多个组织单位。步骤如下:1. 打开记事本或其他脚本编辑器。2. 找到一个包含脚本要创建的多个组织单位名称的文本文件,确保有该文件的准确路径。3. 在脚本的第一行,创建一个名为$aryText的变量,用它来保存Get – Content cmdlet返回的对象,将文本文件的路径指定为路径参数的值。使用Get – Content cmdlet时,它会从文本文件创建一个数组。4. 要遍历数组的每个元素,使用ForEach cmdlet。使用一个名为$aryElement的变量来保存$aryText数组中的行。5. 通过打开一个花括号开始代码块部分。6. 使用变量$strClass来保存字符串“organizationalUnit”,因为这是要在Active Directory中创建的对象类型。7. 要创建的每个组织单位的名称来自文本文件的每一行。用于Create命令的$strOUName是一个变量到另一个变量的直接赋值。8. 代码块中的下一行代码是使用[ADSI]加速器连接到Active Directory的代码。使用LDAP提供程序并连接到NwTraders.msft域,将创建的对象分配给$objADSI变量。9. 现在使用Create方法在Active Directory中创建组织单位。为Create方法指定两个属性:要创建的类的名称和要创建的对象的名称。这里,类的名称存储在变量$strClass中,要创建的对象的名称存储在$strOUName变量中,将返回的对象存储在$objOU变量中。10. 要将更改写回到Active Directory,使用SetInfo()方法。11. 用花括号关闭代码块。12. 将脚本保存为yournameStepByStep.ps1并运行。如果没有看到在域根目录下创建了组织单位,请检查脚本。

以下是根据上述步骤生成的PowerShell脚本:


$aryText = Get-Content -Path "c:labsch7stepbystep.txt"
foreach ($aryElement in $aryText) {
    $strClass = "organizationalUnit"
    $StrOUName = $aryElement
    $objADSI = [ADSI]"LDAP://dc=nwtraders,dc=msft"
    $objOU = $objADSI.create($strClass, $StrOUName)
    $objOU.setInfo()
}

将上述代码保存为

yournameStepByStep.ps1

,然后运行该脚本。如果没有看到在域根目录下创建了组织单位,请检查脚本。

© 版权声明

相关文章

暂无评论

none
暂无评论...