前面的一篇文章我们说了部分在PS中进行文件浏览的基本概念,说到了几个虚拟驱动器的概念。并没有深入的描述相关的命令,这里我们进一步对这一知识点进行描述。

2.1 管理当前工作路径/位置

  在日常管理中经常需要对当前的路径进行查询和管理;PS提供了四个管理的cmdlet: get-location、set-location、push-location、pop-location。

  get-location: 相当于unix/Linux中的‘pwd’;用于获取当前的工作路径

  set-location: 相当于chdir、cd命令,用于改变当前工作路径

  push-location: 这是PS中新增加的特性, 当用这个命令的时候,PS就会创建一个历史路径堆栈,这个堆栈用来存储push-location的路径信息, push-location用来将路径保存

          到历史路径堆栈。

  pop-location: 用来将当前工作路径切换到历史路径堆栈的最后一条记录中的位置,并且删除最上的一条记录。

Exp:利用push/pop-loction命令切换工作路径

PS C:\Users\vol_20120330> push-location -path c:\

_____________________________________________________________________________
PS C:\> get-location Path
----
C:\ _____________________________________________________________________________
PS C:\> pop-location _____________________________________________________________________________
PS C:\Users\vol_20120330> get-location Path
----
C:\Users\vol_20120330

  如上所示:  首先用push-location命令保存当前路径并且将当前工作路径切换到C:\ ; 接下来用get-location查看是否切换成功; 然后用pop-location命令切回到原先

保存的路径,并用get-location验证。

2、2  获取当前系统支持的驱动器信息

  get-psdrive 命令获取当前系统支持的驱动器。

Exp: 利用get-psdrive获取当前我的系统上支持的驱动器

PS C:\Users\vol_20120330> get-psdrive

警告: 列“CurrentLocation”无法显示,已被删除。

Name           Used (GB)     Free (GB) Provider      Root
---- --------- --------- -------- ----
Alias Alias
C 17.89 11.41 FileSystem C:\
cert Certificate \
D 7.01 22.29 FileSystem D:\
E 35.61 22.98 FileSystem E:\
Env Environment
F 26.06 32.54 FileSystem F:\
Function Function
G 14.95 33.88 FileSystem G:\
H 31.67 17.15 FileSystem H:\
HKCU Registry HKEY_CURRENT_USER
HKLM Registry HKEY_LOCAL_MACHINE
I FileSystem I:\
K FileSystem K:\
N FileSystem N:\
Variable Variable
WSMan WSMan

  前面简述过get-psdrive命令的psprovider参数,这里不再进行介绍,同时如果需要获取相关信息,可以get-help online一下,可以得到比较详细的信息。

  我们也说过可以利用new-item 命令创建虚拟驱动器;这里我们介绍一个新的命令: new-psdrive。

  new-psdrive常用的参数有: name   用来指定新的驱动器盘符名

                psprovider   用来指定驱动器的提供程序

                root   用来指定新驱动器代表的路径

Exp: 利用new-psdrive命令创建mydirve: 盘符

PS C:\Users\vol_20120330> new-psdrive -name  mydrive   -psprovider  filesystem  -root $home

警告: 列“CurrentLocation”无法显示,已被删除。

Name           Used (GB)     Free (GB) Provider      Root
---- --------- --------- -------- ----
mydrive 11.40 FileSystem C:\Users\vol_20120330

  如实例所示,我们创建了一个盘符:mydrive。我们可以进入盘符进行操作:

PS C:\Users\vol_20120330> cd mydrive:\

_____________________________________________________________________________
PS mydrive:\> gl Path
----
mydrive:\

  我们还可以删除当前添加的盘符,这通过remove-psdrive命令实现,见实例。

Exp: 利用remove-psdrive命令删除刚添加的驱动器盘符。

PS mydrive:\> remove-psdrive   mydrive
Remove-PSDrive : 无法删除驱动器“mydrive”,因为它在使用中。
所在位置 行:1 字符: 15
+ remove-psdrive <<<< mydrive
+ CategoryInfo : InvalidOperation: (:) [Remove-PSDrive], PSInvalid
OperationException
+ FullyQualifiedErrorId : InvalidOperation,Microsoft.PowerShell.Commands.Re
movePSDriveCommand _____________________________________________________________________________
PS mydrive:\> cd c:\ _____________________________________________________________________________
PS C:\> remove-psdrive mydrive _____________________________________________________________________________
PS C:\> cd mydrive:\
Set-Location : 找不到驱动器。名为“mydrive”的驱动器不存在。
所在位置 行:1 字符: 3
+ cd <<<< mydrive:\
+ CategoryInfo : ObjectNotFound: (mydrive:String) [Set-Location],
DriveNotFoundException
+ FullyQualifiedErrorId : DriveNotFound,Microsoft.PowerShell.Commands.SetLo
cationCommand

2、3 目录和文件的建立、复制、移动和删除

  在windows PS中,用item表示在系统驱动器中的项目,因此用item作为cmdlet名词部分的cmdlet都与文件或目录的操作有关。

Exp:利用get-command的发现功能查询文件操作相关命令

PS C:\> get-command *-item

CommandType     Name                             Definition
----------- ---- ----------
Cmdlet Clear-Item Clear-Item [-Path] <String[]...
Cmdlet Copy-Item Copy-Item [-Path] <String[]>...
Cmdlet Get-Item Get-Item [-Path] <String[]> ...
Cmdlet Invoke-Item Invoke-Item [-Path] <String[...
Cmdlet Move-Item Move-Item [-Path] <String[]>...
Cmdlet New-Item New-Item [-Path] <String[]> ...
Cmdlet Remove-Item Remove-Item [-Path] <String[...
Cmdlet Rename-Item Rename-Item [-Path] <String>...
Cmdlet Set-Item Set-Item [-Path] <String[]> ...

  从上面可以看到一共有9个相关的命令,但是这并没有包括全部的命令,因为还一个非常实用的命令:get-childitem;下面我们一一进行介绍:

1) get-item

  get-item的作用是获取指定位置的项的相关信息。

Exp:利用get-item获取当前路径下项的信息

PS C:\> get-item .\

    目录: 

Mode                LastWriteTime     Length Name
---- ------------- ------ ----
d--hs 2012/4/20 6:38 C:\

Exp: 利用get-item获取当前用户home目录的信息

 PS C:\> get-item $home

    目录: C:\Users

Mode                LastWriteTime     Length Name
---- ------------- ------ ----
d---- 2012/5/12 17:31 vol_20120330

  这个命令具体可以参考帮助,其他就多说了。

2)get-childitem

  这个命令获取某个项目中子项, 这个命令有很多的参数,但常用的有-name、 -recurse、-path、-force参数。

  name: 指定获取子项的时候仅枚举子项的名称。

  recurse: 递归获取

  path: 指定要枚举的路径,这个参数可以省略

  force:  获取所有的子项,包括隐藏的子项

  这个命令还有include、exclude两个常用的参数,具体就不介绍了,大家可以查看帮助。

Exp:例举当前路径下的子项名称

PS C:\> get-childitem -name
DRIVERS
PerfLogs
Program Files
Users
Windows
autoexec.bat
config.sys
gdiplus.dll

Exp: 获取指定路径下的子项——获取$home路径下的子项

PS C:\> get-childitem -path $home

    目录: C:\Users\vol_20120330

Mode                LastWriteTime     Length Name
---- ------------- ------ ----
d-r-- 2012/3/30 18:27 Contacts
d-r-- 2012/5/12 17:19 Desktop
d-r-- 2012/5/12 17:18 Documents
d-r-- 2012/5/12 5:34 Downloads
d-r-- 2012/5/2 9:51 Favorites
d-r-- 2012/3/30 18:27 Links
d-r-- 2012/4/30 14:15 Music
d-r-- 2012/3/30 18:27 Pictures
d-r-- 2012/3/30 18:27 Saved Games
d-r-- 2012/3/30 18:27 Searches
d-r-- 2012/3/30 18:27 Videos
-a--- 2012/5/12 17:25 10346 process.txt
-a--- 2012/5/12 17:31 5254 process1.txt
-a--- 2012/4/15 19:14 509 regwizard.log
-a--- 2012/4/15 19:14 9853 sanct.log _____________________________________________________________________________
PS C:\> get-childitem $home 目录: C:\Users\vol_20120330 Mode LastWriteTime Length Name
---- ------------- ------ ----
d-r-- 2012/3/30 18:27 Contacts
d-r-- 2012/5/12 17:19 Desktop
d-r-- 2012/5/12 17:18 Documents
d-r-- 2012/5/12 5:34 Downloads
d-r-- 2012/5/2 9:51 Favorites
d-r-- 2012/3/30 18:27 Links
d-r-- 2012/4/30 14:15 Music
d-r-- 2012/3/30 18:27 Pictures
d-r-- 2012/3/30 18:27 Saved Games
d-r-- 2012/3/30 18:27 Searches
d-r-- 2012/3/30 18:27 Videos
-a--- 2012/5/12 17:25 10346 process.txt
-a--- 2012/5/12 17:31 5254 process1.txt
-a--- 2012/4/15 19:14 509 regwizard.log
-a--- 2012/4/15 19:14 9853 sanct.log

Exp: 获取所有的子项,利用force参数

PS C:\> get-childitem -force

    目录: C:\

Mode                LastWriteTime     Length Name
---- ------------- ------ ----
d--hs 2012/3/30 18:27 $Recycle.Bin
d--hs 2009/7/14 12:53 Documents and Settings
d---- 2012/3/30 18:30 DRIVERS
d-rh- 2012/4/3 16:33 MSOCache
d---- 2009/7/14 10:37 PerfLogs
d-r-- 2012/5/5 16:00 Program Files
d--h- 2012/5/5 16:00 ProgramData
d--hs 2012/3/30 18:26 Recovery
d--hs 2012/5/6 9:18 System Volume Information
d-r-- 2012/3/30 18:27 Users
d---- 2012/5/5 14:54 Windows
-a--- 2009/6/11 5:42 24 autoexec.bat
-a--- 2009/6/11 5:42 10 config.sys
-a--- 2008/9/10 15:00 1724416 gdiplus.dll
-a-hs 2012/5/12 3:32 1551273984 hiberfil.sys
-a-hs 2012/5/12 3:32 2068369408 pagefile.sys

Exp:递归获取路径下的子项

PS C:\> get-childitem -path $home  -recurse

    目录: C:\Users\vol_20120330

Mode                LastWriteTime     Length Name
---- ------------- ------ ----
d-r-- 2012/3/30 18:27 Contacts
d-r-- 2012/5/12 17:19 Desktop
d-r-- 2012/5/12 17:18 Documents
d-r-- 2012/5/12 5:34 Downloads
d-r-- 2012/5/2 9:51 Favorites
d-r-- 2012/3/30 18:27 Links
d-r-- 2012/4/30 14:15 Music
d-r-- 2012/3/30 18:27 Pictures
d-r-- 2012/3/30 18:27 Saved Games
d-r-- 2012/3/30 18:27 Searches
d-r-- 2012/3/30 18:27 Videos
-a--- 2012/5/12 17:25 10346 process.txt
-a--- 2012/5/12 17:31 5254 process1.txt
-a--- 2012/4/15 19:14 509 regwizard.log
-a--- 2012/4/15 19:14 9853 sanct.log 目录: C:\Users\vol_20120330\Contacts Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2012/3/30 18:27 68381 vol_20120330.contact

  get-childitem还有一个值得一提的功能: 就是支持通配符 * 、?和 [] ; 具体不举实例了,基本和cmd里面的通配符差不多。

3) new-item

  通过new-item命令创建新项, 这个命令支持的常用参数有: path、itemtype。

  path: 指定要创建的新项的存放位置

  itemtype:指定要创建的新项的类型

Exp:  在 home路径下创建一个vol的文件夹,创建一个vol.txt 的文件

PS C:\Users\vol_20120330> new-item -path $home\vol.txt  -itemtype file  

    目录: C:\Users\vol_20120330

Mode                LastWriteTime     Length Name
---- ------------- ------ ----
-a--- 2012/5/12 18:56 0 vol.txt

  如上所示就为创建的文件。

PS C:\Users\vol_20120330> new-item -path $home\vol  -itemtype directory

    目录: C:\Users\vol_20120330

Mode                LastWriteTime     Length Name
---- ------------- ------ ----
d---- 2012/5/12 18:57 vol

  如上所示创建的是文件夹/目录。

4、重命名项

  利用rename-item来重命名项。

exp:

PS C:\Users\vol_20120330> rename-item  vol.txt  volcanol.txt

_____________________________________________________________________________
PS C:\Users\vol_20120330> ls 目录: C:\Users\vol_20120330 Mode LastWriteTime Length Name
---- ------------- ------ ----
d-r-- 2012/3/30 18:27 Contacts
d-r-- 2012/5/12 17:19 Desktop
d-r-- 2012/5/12 17:18 Documents
d-r-- 2012/5/12 5:34 Downloads
d-r-- 2012/5/2 9:51 Favorites
d-r-- 2012/3/30 18:27 Links
d-r-- 2012/4/30 14:15 Music
d-r-- 2012/3/30 18:27 Pictures
d-r-- 2012/3/30 18:27 Saved Games
d-r-- 2012/3/30 18:27 Searches
d-r-- 2012/3/30 18:27 Videos
d---- 2012/5/12 18:57 vol
-a--- 2012/5/12 17:25 10346 process.txt
-a--- 2012/5/12 17:31 5254 process1.txt
-a--- 2012/4/15 19:14 509 regwizard.log
-a--- 2012/4/15 19:14 9853 sanct.log
-a--- 2012/5/12 18:56 0 volcanol.txt

  如上所示,命令执行成功后vol.txt变为volcanol.txt;  注意rename-item不能用于移动项目。

5、移动项目

   通过move-item移动项目

Exp: 通过move-item将当前路径下的volcanol.txt 移动到vol目录下

PS C:\Users\vol_20120330> cd vol

_____________________________________________________________________________
PS C:\Users\vol_20120330\vol> ls _____________________________________________________________________________
PS C:\Users\vol_20120330\vol> move-item ..\volcanol.txt .\ _____________________________________________________________________________
PS C:\Users\vol_20120330\vol> ls 目录: C:\Users\vol_20120330\vol Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2012/5/12 18:56 0 volcanol.txt

  如上所示,命令成功执行,volcanol.txt 被移动到vol目录下。

6、复制项

  通过copy-item复制项,但是这里copy-item命令有一点特殊的特性,copy-item仅能复制容器,不能复制容器内的类容。

PS C:\Users\vol_20120330> copy-item vol .\desktop

_____________________________________________________________________________
PS C:\Users\vol_20120330> get-childitem vol 目录: C:\Users\vol_20120330\vol Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2012/5/12 18:56 0 volcanol.txt _____________________________________________________________________________
PS C:\Users\vol_20120330> get-childitem .\Desktop 目录: C:\Users\vol_20120330\Desktop Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 2012/5/12 19:10 vol
-a--- 2012/5/5 14:54 2001 QQ影音.lnk
-a--- 2012/5/12 17:05 79858 截图00.jpg
-a--- 2012/5/12 17:10 129290 截图01.jpg
-a--- 2012/5/12 17:16 10264 截图02.jpg
-a--- 2012/5/12 17:19 97789 截图03.jpg
-a--- 2012/4/6 19:36 1007 腾讯QQ.lnk _____________________________________________________________________________
PS C:\Users\vol_20120330> get-childitem .\Desktop\vol _____________________________________________________________________________

  如上面的执行情况所示,vol目录被成功的复制到desktop目录,但是vol下的volcanol.txt文件没有复制到desktop\vol下面。

  为了复制容器下的项目需要添加recurse参数。

exp:复制容器下的项目

PS C:\Users\vol_20120330> copy-item vol  .\desktop  -recurse

_____________________________________________________________________________
PS C:\Users\vol_20120330> get-childitem vol 目录: C:\Users\vol_20120330\vol Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2012/5/12 18:56 0 volcanol.txt _____________________________________________________________________________
PS C:\Users\vol_20120330> get-childitem .\Desktop 目录: C:\Users\vol_20120330\Desktop Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 2012/5/12 19:14 vol
-a--- 2012/5/5 14:54 2001 QQ影音.lnk
-a--- 2012/5/12 17:05 79858 截图00.jpg
-a--- 2012/5/12 17:10 129290 截图01.jpg
-a--- 2012/5/12 17:16 10264 截图02.jpg
-a--- 2012/5/12 17:19 97789 截图03.jpg
-a--- 2012/4/6 19:36 1007 腾讯QQ.lnk _____________________________________________________________________________
PS C:\Users\vol_20120330> get-childitem .\Desktop\volcanol PS C:\Users\vol_20120330> get-childitem .\Desktop\vol 目录: C:\Users\vol_20120330\Desktop\vol Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2012/5/12 18:56 0 volcanol.txt _____________________________________________________________________________

  如上所示,vol下的文件也被复制。

7、删除项目

  利用remove-item删除项目

Exp:利用remove-item删除上面复制的内容

PS C:\Users\vol_20120330> remove-item  .\Desktop\vol

_____________________________________________________________________________
PS C:\Users\vol_20120330> remove-item .\Desktop\vol -recurse _____________________________________________________________________________
PS C:\Users\vol_20120330> get-item .\Desktop\vol
Get-Item : 找不到路径“C:\Users\vol_20120330\Desktop\vol”,因为该路径不存在。
所在位置 行:1 字符: 9
+ get-item <<<< .\Desktop\vol
+ CategoryInfo : ObjectNotFound: (C:\Users\vol_20120330\Desktop\vo
l:String) [Get-Item], ItemNotFoundException
+ FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetIte
mCommand

  如上,第一个命令:  “PS C:\Users\vol_20120330> remove-item .\Desktop\vol”  在执行的时候当vol下面有文件的时候,会弹出一个

对话框询问是否删除非空目录。

  第二个命令: “PS C:\Users\vol_20120330> remove-item .\Desktop\vol -recurse”  将直接删除目录容器及其包含的内容,而且不提示,因此

在使用的时候需要注意。

  第三个命令:  “PS C:\Users\vol_20120330> get-item .\Desktop\vol” 的执行情况,说明第二个命令成功执行了。

7、执行项目

  通过在PS中使用 invoke-item 命令可以实现执行项目的作用。

Exp: 在PS中执行$home

  invoke-item  $home       #这个命令像在windows资源管理器中双击$home 目录一样,将会打开资源管理器,并且定位到$home目录。

三、小结

  PS中关于重定向和文件目录管理的功能,还是非常易于使用的,掌握这些对系统管理将大有帮助。

PowerShell 中的目录文件管理的更多相关文章

  1. PowerShell_零基础自学课程_5_自定义PowerShell环境及Powershell中的基本概念

    PowerShell_零基础自学课程_5_自定义PowerShell环境及Powershell中的基本概念 据我个人所知,windows下的cmd shell除了能够通过修改系统参数来对其中的环境变量 ...

  2. centos 目录文件管理 mkdir,rm,touch,误删文件extundelete,cp,mv,cat,more,less ,head,tail,chown,chmod ,umask 第四节课

    centos 目录文件管理 mkdir,rm,touch,误删文件extundelete,cp,mv,cat,more,less ,head,tail,chown,chmod ,umask  第四节课 ...

  3. 在Visual Studio 中使用git——文件管理-中(五)

    在Visual Studio 中使用git--什么是Git(一) 在Visual Studio 中使用git--给Visual Studio安装 git插件(二) 在Visual Studio 中使用 ...

  4. PowerShell中的基础数据类型

    PowerShell是一个面向对象的语言,在申明变量的时候不强制要求申明数据类型,使用$开头来申明变量即可. 基本数据类型 PowerShell本身是基于.Net开发出来的,所以在.Net中的基本数据 ...

  5. 使用管道符在PowerShell中进行各种数据操作

    最近在培训PowerShell,在讲到Pipeline的时候,对于我这种长期和数据(数据库)打交道的人来说,觉得很实用,所以写此博文,记录一下. 无论是在Linux中写Bash脚本还是在Window上 ...

  6. Dedecms去掉URL中a目录的方法

    本文实例讲述了Dedecms去掉URL中a目录的方法.分享给大家,供大家参考.具体分析如下: 使用dedecms的朋友可能会发现自己的URL目录生成是会自动带有一个/A/目录了,那么要如何去掉URL中 ...

  7. powershell中使用超大内存对象

    powershell中使用超大内存对象 简单介绍了powershell中超大内存对象的用途,开启powershell超大内存对象的办法. powershell 传教士 原创文章 2016-12-31 ...

  8. linux下截取给定路径中的目录部分

    在日常运维中,有时会要求截取一个路径中的目录部分.截取目录的方法,有以下两种:1)dirname命令(最常用的方法):用于取给定路径的目录部分.很少直接在shell命令行中使用,一般把它用在shell ...

  9. Twitter Storm源代码分析之ZooKeeper中的目录结构

    徐明明博客:Twitter Storm源代码分析之ZooKeeper中的目录结构 我们知道Twitter Storm的所有的状态信息都是保存在Zookeeper里面,nimbus通过在zookeepe ...

随机推荐

  1. CSS介绍

    从HTML被发明开始,样式就以各种形式存在.不同的浏览器结合它们各自的样式语言为用户提供页面效果的控制.最初的HTML只包含很少的显示属性. 随着HTML的成长,为了满足页面设计者的要求,HTML添加 ...

  2. python - 类的字段

    一.静态字段:保存在类里面 1.创建静态字段: class Foo: CC = 123 # 字段(静态字段),保存在类里 def __init__(self): self.name = 'alex' ...

  3. 在cygwin下编译c语言

    #include <stdio.h> int main (void) { printf("Hello World!\n"); ; } 1.保存到cygwin工作目录下 ...

  4. (转)Javascript 面向对象编程(一):封装(作者:阮一峰)

    Javascript是一种基于对象(object-based)的语言,你遇到的所有东西几乎都是对象.但是,它又不是一种真正的面向对象编程(OOP)语言,因为它的语法中没有class(类). 那么,如果 ...

  5. SpinLock(自旋锁)

    SpinLock(自旋锁) SpinLock 结构是一个低级别的互斥同步基元,它在等待获取锁时进行旋转. 在多核计算机上,当等待时间预计较短且极少出现争用情况时,SpinLock 的性能将高于其他类型 ...

  6. SilverLight 页面后台方法XX.xaml.cs 创建JS,调用JS ,弹出提示框

    1.Invoke和InvokeSelf [c-sharp] view plaincopy public partial class CreateJSDemo : UserControl { publi ...

  7. 华为 oj 水题 数字颠倒

    练手,献给初学者 #include <stdio.h> #include <string.h> int main(void) { char string[200]={'\0'} ...

  8. dispatch_async 与 dispatch_get_global_queue 的使用方法

    GCD (Grand Central Dispatch) 是Apple公司开发的一种技术,它旨在优化多核环境中的并发操作并取代传统多线程的编程模式. 在Mac OS X 10.6和IOS 4.0之后开 ...

  9. 0301——Notification 通知

    注册消息 [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(方法) name:@"消息名字&q ...

  10. vc中调用Com组件的方法详解

    vc中调用Com组件的方法详解 转载自:网络,来源未知,如有知晓者请告知我.需求:1.创建myCom.dll,该COM只有一个组件,两个接口:   IGetRes--方法Hello(),   IGet ...