FileSystem Provider

提供程序名称

FileSystem

驱动器

C,D

简短说明

提供对文件和目录的访问。

详细说明

使用 Windows PowerShell FileSystem 提供程序,您可以获取、添加、更改、清除和删除 Windows PowerShell 中的文件和目录。

FileSystem 提供程序公开了与您的计算机上所配置的逻辑驱动器(包括映射到网络共享的驱动器)相对应的 Windows PowerShell 驱动器。例如,某台计算机具有一个软盘驱动器、一个硬盘驱动器和一个映射的网络共享目录,其驱动器分别名为 A、C 和 Z。FileSystem 提供程序将公开直接对应于 A、C 和 Z 的 Windows PowerShell 驱动器,从而允许您从 Windows PowerShell 中引用这些驱动器。例如,若要引用驱动器 C,您可以按下例所示使用 C::

Get-ChildItem c:

此命令将返回 C 驱动器上的所有内容,包括文件和目录。在通过 FileSystem 提供程序引用特定目录或文件时,您必须提供必要的信息以识别该目录或文件。这意味着,在某些情况下您必须提供完全限定的名称。完全限定名称包括驱动器名称(带有冒号)、任何目录和子目录名称以及文件名(如果适用)。例如,以下示例显示了 Shell.dll 文件的完全限定名称,该文件位于 C 驱动器上 Windows 目录的 System32 子目录中:

c:\windows\system32\shell.dll

正如您所见,完全限定名称的每个元素均由反斜杠 (\) 分隔。Windows PowerShell 还允许您使用正斜杠 (/) 以与其他各种 shell 保持一致。

在某些情况下,您无需在引用文件或目录时提供完全限定的名称。例如,当您要访问当前工作位置中的文件时,只需提供文件名。如果您的当前工作位置为 c:\windows,则您可以使用以下命令来查看该目录中所有 .dll 文件的列表:

Get-ChildItem *.dll

如果您的工作目录是 c:\windows 之外的其他目录,例如 c:\program files\Windows PowerShell,则您的命令可能需要包括完全限定的名称:

Get-ChildItem c:\windows\*.dll

在某些情况下,您可以使用位置的相对引用。如果您的工作位置为 c:\windows,并且您希望查看 c:\windows\system32 目录下的 .dll 文件列表,则您可以使用以下命令:

Get-ChildItem .\system32\*.dll

\system32 前面的句点表示当前工作位置。

在某些情况下,您的当前工作位置可能位于 FileSystem 驱动器之外的其他驱动器上。在这种情况下,您必须始终在引用中包括目标驱动器的名称。例如,假定您的当前工作位置为 env: 驱动器。若要查看 C 驱动器的内容,您可以使用以下命令:

Get-ChildItem c:

示例

在文件系统中导航

-------------------------- 示例 1 --------------------------

此命令获取当前位置:

get-location

Get-Location cmdlet 提供与 Windows 命令提示符中的 cd 命令以及 UNIX 中的 pwd 命令类似的命令功能。有关详细信息,请键入: get-help get-location

-------------------------- 示例 2 --------------------------

此命令设置当前位置:

set-location C:

获取文件和目录信息

-------------------------- 示例 1 --------------------------

此命令获取当前目录中的所有文件和目录:

get-childitem

默认情况下,Get-ChildItem cmdlet 不进行递归。如果在运行此命令时当前目录中存在文件和文件夹,则将返回一个 System.IO.FileInfo 对象和一个 System.IO.DirectoryInfo 对象。

-------------------------- 示例 2 --------------------------

此命令使用 Get-ChildItem 获取当前目录中的所有文件和目录:

get-childitem | where-object {!$_.psiscontainer}

它通过管道将结果传递给 Where-Object,后者将检查 PSIsContainer 属性并且只允许非 (!) 容器对象通过管道。

-------------------------- 示例 3 --------------------------

此命令使用 Get-ChildItem 获取当前目录中的所有文件和目录。它通过管道将结果传递给 Where-Object,后者将检查 PSIsContainer 属性并且只允许容器对象通过管道。

get-childitem | where-object {$_.psiscontainer}

-------------------------- 示例 4 --------------------------

此命令使用 Get-ChildItem 获取当前目录中的所有文件和目录:

get-item -path a | format-list *

它通过管道将结果传递给 Where-Object cmdlet,后者将检查 PSIsContainer 属性并且只允许容器对象通过管道。

-------------------------- 示例 5 --------------------------

此命令使用 Get-Item cmdlet 获取有关 Test.txt 文件的信息:

get-item -path test.txt | format-list *

Format-List cmdlet 用于显示所得到的对象的所有属性。

复制文件和目录

-------------------------- 示例 1 --------------------------

此命令将 C:\A 目录中的文件 A.txt 复制到 C:\A\Bb 目录下:

copy-item -path C:\a\a.txt -destination C:\a\bb\a.txt

此命令将覆盖目标目录中的文件,并且不提示您进行确认。

-------------------------- 示例 2 --------------------------

此命令将 C:\A\Bb 目录中文件扩展名为 .txt 的所有文件都复制到 C:\A\Cc\Ccc\ 目录下:

copy-item -path C:\a\bb\*.txt -destination C:\a\cc\ccc\

此命令使用文件的原始名称。此命令将覆盖目标目录中的现有文件,并且不提示您进行确认。

-------------------------- 示例 3 --------------------------

将 C:\a 目录中的所有目录和文件复制到 C:\c 目录下。如果要复制的任何目录在目标目录中已存在,则除非指定 Force 参数,否则此命令将会失败。

copy-item -path C:\a\* -destination C:\c -recurse

移动文件和目录

-------------------------- 示例 1 --------------------------

此命令将 C:\A 目录中的 C.txt 文件移动到 C:\A\Aa 目录下:

move-item -path C:\a\c.txt -destination C:\a\aa

此命令将不会自动覆盖现有的同名文件。要强制该 cmdlet 覆盖现有文件,请指定 Force 参数。

-------------------------- 示例 2 --------------------------

此命令将 C:\A 目录及其所有内容移动到 C:\B 目录下:

move-item -path C:\a -destination C:\b

无法移动当前所在的目录。

管理文件内容

-------------------------- 示例 1 --------------------------

此命令将字符串“test content”追加到 Test.txt 文件中:

add-content -path test.txt -value "test content"

这样将不会删除 Test.txt 文件中的现有内容。

-------------------------- 示例 2 --------------------------

此命令获取 Test.txt 文件的内容并在控制台中显示这些内容:

get-content -path test.txt

可以通过管道将文件内容传递给其他 cmdlet。例如,下面命令将读取 Test.txt 文件的内容,并将这些内容作为输入提供给 ConvertTo-HTML cmdlet: get-content -path test.txt |convertto-html

-------------------------- 示例 3 --------------------------

此命令用字符串“test content”替换 Test.txt 文件的内容:

set-content -path test.txt -value "test content"

该命令将覆盖 Test.txt 的内容。在创建文件时,您可以使用 New-Item cmdlet 的 Value 参数向文件中添加内容。

管理安全描述符

-------------------------- 示例 1 --------------------------

此命令返回一个 System.Security.AccessControl.FileSecurity 对象:

get-acl -path test.txt | format-list -property *

有关此对象的详细信息,请通过管道将此命令传递给 Get-Member cmdlet。或者,请查看 MSDN (Microsoft Developer Network ) Library 中的“FileSecurity 类”,网址是 https://go.microsoft.com/fwlink/?LinkId=145718。

-------------------------- 示例 2 --------------------------

此命令返回一个 System.Security.AccessControl.DirectorySecurity 对象:

get-acl -path test_directory | format-list -property *

有关此对象的详细信息,请通过管道将此命令传递给 Get-Member cmdlet。或者,请查看 MSDN Library 中的“DirectorySecurity 类”,网址是 https://go.microsoft.com/fwlink/?LinkId=145736。

创建文件和目录

-------------------------- 示例 1 --------------------------

此命令将在 C 驱动器中创建 Logfiles 目录:

new-item -path c:\ -name logfiles -type directory

-------------------------- 示例 2 --------------------------

此命令在 C: Logfiles 目录中创建 Log2.txt 文件,并将字符串“test log”添加到该文件中:

new-item -path c:\logfiles -name log.txt -type file

-------------------------- 示例 3 --------------------------

在 C:\logfiles 目录中创建名为 Log2.txt 的文件,并将字符串“test log”添加到该文件中。

new-item -path c:\logfiles -name log2.txt -type file -value "test log"

重命名文件和目录

-------------------------- 示例 1 --------------------------

此命令将 C:\A 目录中的文件 A.txt 重命名为 B.txt:

rename-item -path c:\a\a.txt -newname b.txt

-------------------------- 示例 2 --------------------------

此命令将 C:\A\Cc 目录重命名为 C:\A\Dd:

rename-item -path c:\a\cc -newname dd

删除文件和目录

-------------------------- 示例 1 --------------------------

此命令删除当前目录中的 Test.txt 文件:

remove-item -path test.txt

-------------------------- 示例 2 --------------------------

此命令删除当前目录中文件扩展名为 .xml 的所有文件:

remove-item -path *.xml

通过调用关联文件来启动程序

-------------------------- 示例 1 --------------------------

第一个命令使用 Get-Service cmdlet 获取有关本地服务的信息。

它通过管道将信息传递给 Export-Csv cmdlet,并将这些信息存储在 Services.csv 文件中。

第二个命令使用 Invoke-Item 在与 .csv 扩展名相关联的程序中打开 Services.csv:

get-service | export-csv -path services.csv

invoke-item -path services.csv

动态参数

动态参数是由 Windows PowerShell 提供程序添加的 cmdlet 参数,且只可用于在启用了提供程序的驱动器中使用 cmdlet 的情况。

Encoding <Microsoft.PowerShell.Commands.FileSystemCmdletProviderEncoding>

Value Description

Unknown

编码类型未知或无效。数据可作为二进制处理。

String

使用针对字符串的编码类型。

Unicode

采用使用 little-endian 字节顺序的 UTF-16 格式进行编码。

Byte

将一组字符编码为一个字节序列。

BigEndianUnicode

采用使用 big-endian 字节顺序的 UTF-16 格式进行编码。

UTF8

采用 UTF-8 格式进行编码。

UTF7

采用 UTF-7 格式进行编码。

ASCII

使用针对 ASCII(7 位)字符集的编码方式。

支持 Cmdlet

Delimiter <System.String>

指定读取文件时使用的分隔符。默认分隔符为“\n”(行尾)。

支持 Cmdlet

Wait <System.Management.Automation.SwitchParameter>

等待要追加到文件的内容。如果已追加内容,则此参数将返回追加的内容。如果内容已更改,则返回整个文件。

在等待过程中,Get-Content 将每隔一秒检查一次文件,直至中断该操作(例如通过按 Ctrl+C)。

支持 Cmdlet

另请参阅

概念

about_providers