PowerShell基础教程(11)——直接对项进行操作

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 将无法识别路径中的驱动器名称。

为什么注册表值不属于项<o:p></o:p>

在使用 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 中打开。

 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值