PowerShell基础教程(11)——直接对项进行操作 <o:p></o:p>
在 Windows PowerShell 驱动器中看到的元素(例如文件系统驱动器中的文件和文件夹)和 Windows PowerShell 注册表驱动器中的注册表项在 Windows PowerShell 中均称为项。用于处理这些项的 cmdlet 的名称中具有名词项。
Get-Command -Noun Item 命令的输出显示,存在九个 Windows PowerShell 项 cmdlet。
PS> Get-Command -Noun Item<o:p></o:p>
<o:p> </o:p>
CommandType Name Definition<o:p></o:p>
----------- ---- ----------<o:p></o:p>
Cmdlet Clear-Item Clear-Item [-Path] <String[]...<o:p></o:p>
Cmdlet Copy-Item Copy-Item [-Path] <String[]>...<o:p></o:p>
Cmdlet Get-Item Get-Item [-Path] <String[]> ...<o:p></o:p>
Cmdlet Invoke-Item Invoke-Item [-Path] <String[...<o:p></o:p>
Cmdlet Move-Item Move-Item [-Path] <String[]>...<o:p></o:p>
Cmdlet New-Item New-Item [-Path] <String[]> ...<o:p></o:p>
Cmdlet Remove-Item Remove-Item [-Path] <String[...<o:p></o:p>
Cmdlet Rename-Item Rename-Item [-Path] <String>...<o:p></o:p>
Cmdlet Set-Item Set-Item [-Path] <String[]> ...<o:p></o:p>
|
<o:p> </o:p>
创建新项 (New-Item)<o:p></o:p>
若要在文件系统中创建新项,请使用 New-Item cmdlet。包含带有指向该项的路径的 Path 参数和具有“file”或“directory”值的 ItemType 参数。
例如,若要在 C:\Temp 目录中创建名为“New.Directory”的新目录,请键入:
PS> New-Item -Path c:\temp\New.Directory -ItemType Directory<o:p></o:p>
<o:p> </o:p>
Directory:Microsoft.Windows PowerShell.Core\FileSystem::C:\temp<o:p></o:p>
<o:p> </o:p>
Mode LastWriteTime Length Name<o:p></o:p>
---- ------------- ------ ----<o:p></o:p>
d---- 2006-05-18 <st1:timeminute29hour w:st="on">11:29 AM</st1:timeminute29hour> New.Directory<o:p></o:p>
|
<o:p> </o:p>
若要创建文件,请将 ItemType 参数值更改为“file”。例如,若要在 New.Directory 目录中创建名为“file1.txt”的文件,请键入:
PS> New-Item -Path C:\temp\New.Directory\file1.txt -ItemType file<o:p></o:p>
<o:p> </o:p>
Directory:Microsoft.Windows PowerShell.Core\FileSystem::C:\temp\New.Directory<o:p></o:p>
<o:p> </o:p>
Mode LastWriteTime Length Name<o:p></o:p>
---- ------------- ------ ----<o:p></o:p>
-a--- 2006-05-18 <st1:timehour11minute w:st="on">11:44 AM</st1:timehour11minute> 0 file1<o:p></o:p>
|
<o:p> </o:p>
可以使用相同的技术创建新的注册表项。实际上,由于 Windows 注册表中只有项类型属于项,因此创建注册表项更加容易。(注册表项是项属性。)例如,若要在 CurrentVersion 子项中创建名为“_Test”的项,请键入:
PS> New-Item -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\_Test<o:p></o:p>
<o:p> </o:p>
Hive:Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Micros<o:p></o:p>
oft\Windows\CurrentVersion<o:p></o:p>
<o:p> </o:p>
SKC VC Name Property<o:p></o:p>
--- -- ---- --------<o:p></o:p>
0 0 _Test {}<o:p></o:p>
|
<o:p> </o:p>
键入注册表路径时,请确保在 Windows PowerShell 驱动器名称中包含冒号 (:),例如 HKLM: 和 HKCU:。如果没有冒号,则 Windows PowerShell 将无法识别路径中的驱动器名称。
在使用 Get-ChildItem cmdlet 查找注册表项中的项时,是无法看到实际的注册表项或注册表项的值的。
例如,注册表项 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run 通常包含几个表示系统启动时运行的应用程序的注册表项。
但是,在使用 Get-ChildItem 查找该项中的子项时,则所能看到的将是该项的 OptionalComponents 子项:
PS> Get-ChildItem HKLM:\Software\Microsoft\Windows\CurrentVersion\Run<o:p></o:p>
Hive:Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\Micros<o:p></o:p>
oft\Windows\CurrentVersion\Run<o:p></o:p>
SKC VC Name Property<o:p></o:p>
--- -- ---- --------<o:p></o:p>
3 0 OptionalComponents {}<o:p></o:p>
|
<o:p> </o:p>
尽管可以很容易地将注册表项当作项,但却无法将路径指定给注册表项以确保其唯一性。路径表示法无法将名为 Run 的注册表子项与 Run 子项中的 (Default) 注册表项区分开来。此外,由于注册表项的名称包含反斜杆字符 (\),如果注册表项是项,则无法使用路径表示法来将名为 Windows\CurrentVersion\Run 的注册表项与位于该路径中的子项区分开来。
重命名现有项 (Rename-Item)<o:p></o:p>
若要更改文件名或文件夹的名称,请使用 Rename-Item cmdlet。以下命令可将 file1.txt 文件名更改为 fileOne.txt。
PS> Rename-Item -Path C:\temp\New.Directory\file1.txt fileOne.txt<o:p></o:p>
|
<o:p> </o:p>
Rename-Item cmdlet 可更改文件名或文件夹的名称,但无法移动项。以下命令失败的原因是,该命令试图将 New.Directory 目录中的文件移动至 Temp 目录。
PS> Rename-Item -Path C:\temp\New.Directory\fileOne.txt c:\temp\fileOne.txt<o:p></o:p>
Rename-Item :无法重命名,因为指定的目标不是路径。<o:p></o:p>
所在行:1 字符:12 <o:p></o:p>
+ Rename-Item <<<< -Path C:\temp\New.Directory\fileOne c:\temp\fileOne.txt<o:p></o:p>
|
<o:p> </o:p>
移动项 (Move-Item)<o:p></o:p>
若要移动文件或文件夹,请使用 Move-Item cmdlet。
例如,以下命令可以将 New.Directory 目录从 C:\temp 目录移动至 C: 驱动器的根目录中。若要验证某项是否已移动,请在 Move-Item cmdlet 中包含 PassThru 参数。如果不包含 Passthru,则 Move-Item cmdlet 将不会显示任何结果。
PS> Move-Item -Path C:\temp\New.Directory -Destination C:\ -PassThru<o:p></o:p>
<o:p> </o:p>
Directory:Microsoft.Windows PowerShell.Core\FileSystem::C:\<o:p></o:p>
<o:p> </o:p>
Mode LastWriteTime Length Name<o:p></o:p>
---- ------------- ------ ----<o:p></o:p>
d---- 2006-05-18 <st1:timeminute14hour w:st="on">12:14 PM</st1:timeminute14hour> New.Directory<o:p></o:p>
|
<o:p> </o:p>
复制项 (Copy-Item)<o:p></o:p>
如果您熟悉其他外壳程序中的复制操作,则可能会发现 Windows PowerShell 中的 Copy-Item cmdlet 的行为有些不同。在您将某项从一个位置复制到另一位置时,默认情况下,Copy-Item 不会复制其内容。
例如,如果将 New.Directory 目录从 C: 驱动器复制到 C:\temp 目录,则会执行该命令,但却不会复制 New.Directory 目录中的文件。
PS> Copy-Item -Path C:\New.Directory -Destination C:\temp<o:p></o:p>
|
<o:p> </o:p>
如果显示 C:\temp\New.Directory 中的内容,则将发现该目录中不包含任何文件:
PS> Get-ChildItem -Path C:\temp\New.Directory<o:p></o:p>
PS><o:p></o:p>
|
<o:p> </o:p>
为什么 Copy-Item cmdlet 不会将内容复制到新的位置?
Copy-Item cmdlet 已设计为通用命令,它不适用于复制文件和文件夹。另外,甚至在复制文件和文件夹时,您也只能复制容器,而不能复制容器中的项。
若要复制文件夹中的所有内容,请在命令中包含 Copy-Item cmdlet 的 Recurse 参数。如果已复制的目录没有内容,则可以添加 Force 参数,而该参数将允许覆盖空文件夹。
PS> Copy-Item -Path C:\New.Directory -Destination C:\temp -Recurse -Force -Passthru<o:p></o:p>
Directory:Microsoft.Windows PowerShell.Core\FileSystem::C:\temp<o:p></o:p>
<o:p> </o:p>
Mode LastWriteTime Length Name<o:p></o:p>
---- ------------- ------ ----<o:p></o:p>
d---- 2006-05-18 <st1:timeminute53hour w:st="on">1:53 PM</st1:timeminute53hour> New.Directory<o:p></o:p>
<o:p> </o:p>
Directory:Microsoft.Windows PowerShell.Core\FileSystem::C:\temp\New.Directory<o:p></o:p>
<o:p> </o:p>
Mode LastWriteTime Length Name<o:p></o:p>
---- ------------- ------ ----<o:p></o:p>
-a--- 2006-05-18 <st1:timehour11minute w:st="on">11:44 AM</st1:timehour11minute> 0 file1<o:p></o:p>
|
<o:p> </o:p>
删除项 (Remove-Item)<o:p></o:p>
若要删除文件和文件夹,请使用 Remove-Item cmdlet。对于进行明显的不可逆更改的 Windows PowerShell cmdlet(例如 Remove-Item),若要执行此类命令,通常,Windows PowerShell cmdlet 会提示您进行确认。例如,若要尝试删除 New.Directory 文件夹,则系统将提示您确认该命令,因为该文件夹包含有文件:
PS> Remove-Item C:\New.Directory<o:p></o:p>
<o:p> </o:p>
确认<o:p></o:p>
C:\temp\New.Directory 中的项具有子项,并且没有指定 -recurse 参数。<o:p></o:p>
如果继续,所有子项均将随该项删除。是否确实要继续?<o:p></o:p>
<o:p> </o:p>
[Y] 是 [A] 全是 [N] 否 [L] 全否 [S] 挂起 [?] 帮助<o:p></o:p>
(默认值为“Y”):<o:p></o:p>
|
<o:p> </o:p>
由于 Yes 为默认响应,因此若要删除文件夹及其文件,请按 Enter 键。若要不进行确认即可删除文件夹,请使用 -Recurse 参数。
PS> Remove-Item C:\temp\New.Directory -Recurse<o:p></o:p>
|
<o:p> </o:p>
执行项 (Invoke-Item)<o:p></o:p>
Windows PowerShell 使用 Invoke-Item cmdlet 来对文件或文件夹执行默认操作。此默认操作是由注册表中默认应用程序的处理程序确定的,其效果与在 Windows 资源管理器中双击该项的效果相同。
例如,假设您运行以下命令:
PS> Invoke-Item C:\WINDOWS<o:p></o:p>
|
<o:p> </o:p>
将出现位于 C:\Windows 中的资源管理器窗口,其效果与双击 C:\Windows 文件夹相同。
如果在 Windows Vista 之前的系统中调用 Boot.ini 文件:
PS> Invoke-Item C:\boot.ini<o:p></o:p>
|
<o:p> </o:p>
如果 .ini 文件类型与 Notepad 相关联,则 boot.ini 文件将在 Notepad 中打开。
分享到:
相关推荐
最新超全的渗透测试学习基础教程集合,新手、大佬都可以阅读: 01.入门笔记之看雪Web安全学习及异或解密示例; 02.Chrome浏览器保留密码功能渗透解析及登录加密入门笔记; 03.Burp Suite工具安装配置、Proxy基础用法...
【批处理】是一种在DOS环境下执行一系列命令的文本文件,通常以.BAT为扩展名。...虽然现代操作系统提供了更多高级的自动化工具,但批处理仍然是不可或缺的基础技能,尤其对于系统管理员和IT专业人士而言。
1. **PowerShell基础知识**: PowerShell是一种面向对象的外壳,它取代了传统的CMD命令行,提供了更丰富的功能和更强大的脚本编写能力。它支持命令行操作,同时拥有一个强大的脚本语言——PowerShell Scripting ...
作为赞助人的实验室资源,这个压缩包很可能包含一系列的示例脚本、教程文档以及练习,帮助用户从基础到高级逐步掌握PowerShell。 1. **基础概念**: - PowerShell的工作原理:了解PowerShell的核心组件,包括运行...
本教程旨在为初学者提供全面、深入的Windows操作系统的理解和应用知识,帮助大家掌握日常使用及问题解决的基本技能。 1. **Windows操作系统概述** Windows操作系统自1985年首次发布以来,经历了多个版本的迭代,如...
这个资源包可能包含有关这两类操作系统的教程、手册、实战案例、配置文件示例等,对于想深入理解操作系统工作原理、进行系统管理或者开发者来说非常有价值。在Linux部分,你可能会找到如何安装和配置服务器、管理...
总的来说,DOS虽然在现代计算机环境中已不再主流,但它的核心思想——命令行操作和脚本自动化,依然在各种高级操作系统(如Linux和Windows PowerShell)中得到延续和发展。因此,学习DOS不仅可以了解计算机历史,还...
- 对于更复杂的场景,可能还需要结合其他技术如ADSI(Active Directory Service Interfaces)、PowerShell等进行综合运用。 #### 五、总结 通过本文介绍的两个脚本实例,读者可以了解到WMI脚本的基本编写流程及...
**DOS概述** DOS(Disk Operating System,磁盘操作系统)是个人计算机上最早期...虽然现在DOS的使用已经大大减少,但其精髓——命令行操作和高效的工作方式,仍然在现代的命令提示符(CMD)和PowerShell中得以延续。
在当今的数字时代,对操作系统有深入理解至关重要,尤其是对于IT专业人员来说。Cooolis.github.io是一个致力于分享操作系统命令技巧的指南,它提供了丰富的资源来帮助用户提升在各种操作系统中的工作效率。而LOLBAS...
在Windows操作系统中,可以使用W32Time服务进行配置和管理。该服务默认情况下会周期性地与选定的NTP服务器进行同步。用户可以通过命令行工具(如cmd或PowerShell)运行`w32tm /config /manualpeerlist:服务器地址 /...
《Active Directory 循序渐进系列指南》是一个深入学习和理解Windows操作系统中核心组件——Active Directory(活动目录)的综合教程。本指南旨在帮助IT专业人员逐步掌握如何规划、部署、管理和维护Active Directory...
8. **文件处理API**:对于更复杂的需求,可以利用编程语言(如C++、C#、Java等)直接调用Windows API进行文件和记事本的操作,实现底层控制。 综上所述,“记事本_自动化”主题涵盖了多种技术,主要涉及如何通过...
首先,我们需要了解Java开发环境的基础——Java Development Kit (JDK)。JDK是Java程序员必备的工具,它包含了Java编译器、Java虚拟机(JVM)和其他开发工具。确保下载并安装最新版本的JDK到你的计算机上。 接下来...
这篇教程将指导你如何在两种主要的操作系统——Windows和Linux上快速开始使用.NET Core进行开发。 首先,我们来了解.NET Core的基础知识。.NET Core包含了运行时环境、框架和编译器,使得开发者可以使用C#、F#或VB...
了解如何查看Django版本对开发者而言是非常基础且关键的技能,尤其是在以下场景中: 1. 当你开始一个新项目时,需要确认是否已经安装了正确版本的Django。 2. 在阅读Django官方文档时,为了确保按照正确的指导来...
1. **云服务模型**:Azure支持三种主要的云服务模型——基础设施即服务(IaaS)、平台即服务(PaaS)和软件即服务(SaaS)。IaaS允许用户租用计算资源,如虚拟机;PaaS提供了一个平台来构建、运行和管理应用程序;...