Windows Server Core 管理与 PowerShell 笔记(二)———— 导航文件系统

2019-04-04 412 Words Windows Powershell

Windows Server Core 管理与 PowerShell 笔记(二)———— 导航文件系统

这里我们将会简单记录 PowerShell 目录浏览的相关命令。此外还将介绍 PowerShell 的广义启动器变量。

一、PowerShell 的启动器变量

众所周知,Windows 将磁盘驱动器分配盘符,并使用盘符加以访问,比如 C:, D: 等。在 Windows PowerShell 中,驱动器将拥有更加广泛的内涵。我们通过命令 Get-PSDrive 来列出系统中有那些驱动器:

PS C:\Users\ertuil> Get-PSDrive

Name           Used (GB)     Free (GB) Provider      Root                                               CurrentLocation
----           ---------     --------- --------      ----                                               ---------------
Alias                                  Alias
C                  16.34         23.33 FileSystem    C:\                                                   Users\ertuil
Cert                                   Certificate   \
D                                      FileSystem    D:\
Env                                    Environment
Function                               Function
HKCU                                   Registry      HKEY_CURRENT_USER
HKLM                                   Registry      HKEY_LOCAL_MACHINE
Variable                               Variable
WSMan                                  WSMan

从 Name 属性,可以获知每一个驱动器的名称。比如 C、D 等。从 Provider 属性可以看到除了传统的文件系统 FileSystem 之外,还可以看到更多的属性。

  1. FileSystem 提供商用于挂在磁盘驱动器。这就是传统的 C: 等磁盘驱动器的映射。可以看到 Uesd 和 Free 属性是用量,而 Root 属性指定了挂在位置。
  2. Alias 驱动器,提供了 PowerShell Alias 虚拟目录,这个目录中记录了全部 Alias 的键值对,例如下面 Alias 记载了 wget 指向 Invoke-WebRequest 命令。
PS C:\Users\ertuil> cd Alias: ; Get-Item wget

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Alias           wget -> Invoke-WebRequest
  1. Environment 驱动器保存了当前环境下全部的环境变量。注意的是,在这里修改环境变量并不会永久保存,我们可以使用像下面这样使用,来获取当前系统内核信息。
PS C:\Users\ertuil> $env:OS
Windows_NT
  1. Function 驱动器定义了 PowerShell 所定义的函数
  2. Variable 定义了 PowerShell 当前定义的变量
  3. Cert 映射了证书存放位置。
  4. Registry 驱动器是注册表驱动器,默认挂载了注册表中的 HKEY_CURRENT_USER 和 HKEY_LOCAL_MACHINE 子树。

这些广义上的驱动器,给了我们统一的操作接口来新增、查询、删除、修改所有的文件、环境变量、函数、别名甚至注册表。下面将会详细介绍一些常用的 Comlet 调用。

二、驱动器浏览常用命令

2.1 列出当前目录(Get-ChildItem,Alias:ls,dir)

这个命令列出了当前文件夹下的所有子内容。Powershell 对这个命令由多个别名,保证不管是 Linux 还是 Windows 管理员都能顺利上手。

PS C:\Users\ertuil> ls

    目录: C:\Users\ertuil
Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----        2019/3/29     17:06                .conda
d-----        2019/3/29     18:48                .vscode
d-r---        2019/3/29     14:53                3D Objects
d-r---        2019/3/29     14:53                Contacts
d-----        2019/3/30     10:33                CTF
d-r---        2019/3/30     10:33                Desktop
d-r---        2019/3/30     10:33                Documents
d-r---         2019/4/2     16:38                Downloads
d-r---        2019/3/29     14:53                Favorites
d-r---        2019/3/29     14:53                Links
d-r---        2019/3/29     14:53                Music
d-r---        2019/3/29     14:53                Pictures
d-r---        2019/3/29     14:53                Saved Games
d-r---        2019/3/29     14:53                Searches
d-r---        2019/3/29     14:53                Videos
d-----        2019/3/30     10:18                WorkSpace
-a----        2019/3/29     16:04            156 .condarc

通常情况下,我会使用 ls 来列出目录。注意其中的 Mode 属性,并不是 Linux 意义下的权限表示,而是文件类型,比如 ‘d’ 代表目录,‘r’ 代表只读。

2.2 查看当前位置(Get-Location,Alias: pwd)和修改当前位置(Set-Location,Alias:cd)

这是一对对偶命令,使用 Get-Location 命令来查询当前位置,以及使用 Set-Location 来改变位置。我通常情况下习惯使用 pwd 和 cd 别名。值得注意的是,Linux 常用的 “.” , “..” , “~” 等标记依然可用。

2.3 查看文件内容(Get-Item 和 Get-Content,Alias:cat,和 more)

Get-Item 命令用于获取单个文件的信息,比如:Get-Item test.txt 等。另外有 Get-Content 命令可以查看文件的内容。他有一个别名叫做 cat

PS C:\Users\ertuil> cat .\test.txt
Hello,World
PowerShell
Windows Server Core
Microsoft

PowerShell 中也有 more 命令,可以查看较长的文本。

2.4 新建文件和文件夹(New-Item 和 mkdir)

新建文件和文件夹都是使用命令 New-Item。 其中,当使用参数 -Type Directory 时候,会新建文件夹。但是这样比较麻烦,因此 PowerShell 提供了 mkdir 来直接新建文件夹。

PS C:\Users\ertuil> mkdir a

    目录: C:\Users\ertuil
Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----         2019/4/4     21:59                a

PS C:\Users\ertuil> New-Item -Type Directory b

    目录: C:\Users\ertuil
Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----         2019/4/4     21:59                b

PS C:\Users\ertuil> New-Item c

    目录: C:\Users\ertuil
Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----         2019/4/4     21:59              0 c

2.5 删除文件和文件夹(Remove-Item,alias:rm)

删除文件和文件夹都是使用 Remove-Item 命令,也可以使用别名 rm。当文件夹有内容时,windows 会给出进一步操作提示:

PS C:\Users\ertuil> rm a

确认
C:\Users\ertuil\a 处的项具有子项,并且未指定 Recurse 参数。如果继续,所有子项均将随该项删除。是否确实要继续?
[Y] 是(Y)  [A] 全是(A)  [N] 否(N)  [L] 全否(L)  [S] 暂停(S)  [?] 帮助 (默认值为“Y”):

2.6 拷贝(Copy-Item,alias:copy,cp,ci)和移动(Move-Item,alias:mv,move,mi)

这两个命令使用基本上没有什么太大区别。因此不再介绍具体使用。只是要提示一句,Windows 的文件权限机制和 Linux 的并不相同,在移动文件和拷贝文件时,可能会产生权限的变化,

三、总结

这里主要介绍了 Windows PowerShell 的常见目录操作。由于使用了别名机制,使得我们能够通过使用与 Linux Shell 以及 Windows CMD 非常相似的命令来操作文件,直接减少了我们上手 PowerShell 的难度。