about_FileSystem_Provider

提供程序名称

文件系统

驱动器

功能

FilterShouldProcess

简短说明

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

详细说明

通过 PowerShell FileSystem 提供程序,你可以获取、添加、更改、清除和删除 PowerShell 中的文件和目录。

FileSystem 驱动器是计算机上包含目录和文件的分层命名空间。 FileSystem 驱动器可以是逻辑或物理驱动器、目录或映射网络共享。

FileSystem 提供程序支持以下 cmdlet,本文会进行介绍。

此提供程序公开的类型

文件是 System.IO.FileInfo 类的实例。 目录是 System.IO.DirectoryInfo 类的实例。

PowerShell 扩展类型系统向这些对象类型添加额外的属性,以提供其他信息。 某些信息特定于平台。 例如,LinkType 属性的可能值取决于所使用的平台和文件系统。 Linux 和 macOS 文件系统支持 HardLinkSymLink。 Windows NTFS 支持 HardLinkSymLinkJunction,以及 LinkType 的其他几个值。

使用 Get-ItemGet-ChildItem 来提供有关链接项的信息时,Mode 属性包含一个 l,指示该项是链接。 LinkType 属性包含链接的类型。

从 Microsoft Store 安装应用程序时会创建AppExecLink 链接。 对于 AppExecLink 链接,Windows 不提供 LinkTypeLinkTarget 属性的值。

Get-Item ~\AppData\Local\Microsoft\WindowsApps\winget.exe

    Directory: C:\Users\user1\AppData\Local\Microsoft\WindowsApps

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a---l          6/8/2023  12:20 PM              0 winget.exe

FileSystem 提供程序通过将计算机上的任何逻辑驱动器映射为 PowerShell 驱动器来公开其数据存储。 若要使用 FileSystem 驱动器,可以使用驱动器名称后跟冒号 (:) 将位置更改为驱动器。

Set-Location C:

还可以从任何其他 PowerShell驱动器使用 FileSystem 提供程序。 若要从其他位置引用文件或目录,请在路径中使用驱动器名称 (C:D:...)。

注意

PowerShell 使用别名来让你熟悉如何使用提供程序路径。 dirls 等命令现在是 Get-ChildItem 的别名,cdSet-Location 的别名。 而 pwdGet-Location 的别名。

获取文件和目录

Get-ChildItem cmdlet 返回当前位置的所有文件和目录。 可以指定不同的路径来搜索并使用内置参数来筛选和控制递归深度。

Get-ChildItem

若要详细了解 cmdlet 用法,请参阅 Get-ChildItem

复制文件和目录

Copy-Item cmdlet 将文件和目录复制到指定的位置。 参数可用于筛选和递归,类似于 Get-ChildItem

以下命令将路径 C:\temp\ 下的所有文件和目录复制到文件夹 C:\Windows\Temp

Copy-Item -Path C:\temp\* -Destination C:\Windows\Temp -Recurse -File

Copy-Item 将覆盖目标目录中的文件,并且不会提示你进行确认。

此命令将 C:\a 中的文件 a.txt 复制到 C:\a\bb 目录。

Copy-Item -Path C:\a\a.txt -Destination C:\a\bb\a.txt

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

Copy-Item -Path C:\a\* -Destination C:\c -Recurse

有关详细信息,请参阅 Copy-Item

移动文件和目录

此命令将 C:\a 目录中的 c.txt 文件移动到 C:\a\aa 目录:

Move-Item -Path C:\a\c.txt -Destination C:\a\aa

默认情况下,该 cmdlet 不会覆盖具有相同名称的现有文件。 若要强制该 cmdlet 覆盖现有文件,请指定 Force 参数。

无法移动当前所在的目录。 使用 Move-Item 在当前位置移动目录时,会看到此错误。

C:\temp> Move-Item -Path C:\temp\ -Destination C:\Windows\Temp

Move-Item : Cannot move item because the item at 'C:\temp\' is in use.
At line:1 char:1
+ Move-Item C:\temp\ C:\temp2\
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [Move-Item], PSInvalidOperationException
    + FullyQualifiedErrorId : InvalidOperation,Microsoft.PowerShell.Commands.MoveItemCommand

管理文件内容

获取文件的内容

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

Get-Content -Path Test.txt

你可以通过管道将文件内容传递给其他 cmdlet。 例如,以下命令将读取 Test.txt 文件的内容,然后将这些内容作为输入提供给 ConvertTo-HTML cmdlet:

Get-Content -Path Test.txt | ConvertTo-Html

此外,还可以检索其提供程序路径以美元符号 ($) 为前缀的文件的内容。 由于变量命名限制,路径必须用大括号括起来。 有关详细信息,请参阅 about_Variables

${C:\Windows\System32\Drivers\etc\hosts}

将内容添加到文件

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

Add-Content -Path test.txt -Value "test content"

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

替换文件的内容

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

Set-Content -Path test.txt -Value "test content"

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

循环文件中的内容

默认情况下,Get-Content cmdlet 将使用行尾字符作为其分隔符,因此它将获取一个文件作为字符串的集合,在该文件中每一行均对应一个字符串。

可以使用 Delimiter 参数来指定备用分隔符。 如果将该分隔符设置为表示一个部分的结尾或下一部分开头的字符,则可以将该文件拆分为多个逻辑部分。

第一个命令将获取 Employees.txt 文件,并将其拆分为多个部分,其中每个部分均以字词“End of Employee Record”结尾,并且将其保存在 $e 变量中。

第二个命令使用数组表示法来获取 $e 中集合中的第一项。 它使用索引 0,因为 PowerShell 数组从零开始。

有关 Get-Content cmdlet 的详细信息,请参阅 Get-Content 的帮助主题。

有关数组的详细信息,请参阅 about_Arrays

$e = Get-Content c:\test\employees.txt -Delimited "End Of Employee Record"
$e[0]

管理安全描述符

查看文件的 ACL

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

Get-Acl -Path test.txt | Format-List -Property *

有关此对象的详细信息,请通过管道将此命令传递给 Get-Member cmdlet,或查看 FileSecurity 类。

创建文件和目录

创建目录

此命令将在 C 驱动器上创建 logfiles 目录:

New-Item -Path c:\ -Name logfiles -Type directory

PowerShell 还包括“mkdir”函数(别名为“md”),它使用 New-Item cmdlet 创建新目录。

创建 文件

此命令将在 C:\logfiles 目录中创建 log2.txt 文件,然后将“test log”字符串添加到该文件:

New-Item -Path c:\logfiles -Name log2.txt -Type file

创建具有内容的文件

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

New-Item -Path c:\logfiles -Name log2.txt -Type file -Value "test log"

重命名文件和目录

重命名文件

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

Rename-Item -Path c:\a\a.txt -NewName b.txt

重命名目录

此命令将 C:\a\cc 目录重命名为 C:\a\dd

Rename-Item -Path c:\a\cc -NewName dd

删除文件和目录

删除文件

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

Remove-Item -Path test.txt

使用通配符删除文件

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

Remove-Item -Path *.xml

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

调用文件

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

获取具有指定属性的文件和文件夹

获取系统文件

此命令将获取当前目录及其子目录中的系统文件。

它使用 File 参数来仅获取文件(而不是目录),并使用 System 参数来仅获取具有 System 属性的项。

它使用 Recurse 参数获取当前目录以及所有子目录中的项。

Get-ChildItem -File -System -Recurse

获取隐藏文件

此命令将获取当前目录中的所有文件,其中包括隐藏文件。

它将结合使用 Attributes 参数与以下两个值:!Directory+Hidden(用于获取隐藏的文件)和 !Directory(用于获取所有其他文件)。

Get-ChildItem -Attributes !Directory,!Directory+Hidden

dir -att !d,!d+h 与此命令等效。

获取压缩文件和加密文件

此命令将获取当前目录中已压缩或加密的文件。

它将结合使用 Attributes 参数与以下两个值:CompressedEncrypted。 这些值由逗号 (,) 分隔,这表示“OR”运算符。

Get-ChildItem -Attributes Compressed,Encrypted

动态参数

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

编码 <FileSystemCmdletProviderEncoding>

指定文件编码。 默认值为 ASCII。

  • Ascii 使用 ASCII(7 位)字符集。
  • BigEndianUnicode 将 UTF-16 与 big-endian 字节顺序配合使用。
  • BigEndianUTF32 将 UTF-32 与 big-endian 字节顺序配合使用。
  • Byte 将一组字符编码为一个字节序列。
  • Default 使用与系统的活动代码页(通常是 ANSI)对应的编码。
  • Oem 使用与系统的当前 OEM 代码页对应的编码。
  • StringUnicode 相同。
  • Unicode 将 UTF-16 与 little-endian 字节顺序配合使用。
  • UnknownUnicode 相同。
  • UTF7 使用 UTF-7。
  • UTF8 使用 UTF-8。
  • UTF32 将 UTF-32 与 little-endian 字节顺序配合使用。

支持的 cmdlet

  • Add-Content
  • Get-Content
  • Set-Content

分隔符<字符串>

指定 Get-Content 用于在读取时将文件划分为对象的分隔符。

默认值为 \n,即行尾字符。

读取文本文件时,Get-Content 返回字符串对象的集合,每个对象以分隔符字符结尾。

输入文件中不存在的分隔符时,Get-Content 将整个文件作为单个未完成的对象返回。

你可以使用此参数将大文件拆分为较小的文件,方法是指定文件分隔符(例如“End of Example”)作为分隔符。 分隔符将被保留(不会被丢弃),并且成为每个文件部分中的最后一项。

注意

当前,当 Delimiter 参数的值为空字符串时,Get-Content 不会返回任何内容。 这是已知问题。 若要强制 Get-Content 将整个文件返回为单个未分隔的字符串,请输入一个文件中不存在的值。

支持的 cmdlet

  • Get-Content

等待 <SwitchParameter>

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

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

支持的 cmdlet

  • Get-Content

属性 <FlagsExpression>

获取具有指定属性的文件和文件夹。 此参数支持所有属性,并且允许你指定复杂的属性组合。

已在 Windows PowerShell 3.0 中引入了 Attributes 参数。

Attributes 参数支持以下属性:

  • 存档
  • Compressed
  • 设备
  • Directory
  • 已加密
  • Hidden
  • 正常
  • NotContentIndexed
  • Offline
  • ReadOnly
  • ReparsePoint
  • SparseFile
  • 系统
  • 临时

有关这些属性的说明,请参阅 FileAttributes 枚举。

使用以下运算符合并属性。

  • ! - NOT
  • + - AND
  • , - OR

运算符与其属性之间不允许有空格。 但是,在逗号之前允许有空格。

支持的 cmdlet

  • Get-ChildItem

目录 <SwitchParameter>

获取目录(文件夹)。

已在 Windows PowerShell 3.0 中引入了 Directory 参数。

若要仅获取目录,请使用 Directory 参数并省略 File 参数。 若要排除目录,请使用 File 参数并省略 Directory 参数,或者使用 Attributes 参数。

支持的 cmdlet

  • Get-ChildItem

文件 <SwitchParameter>

获取文件。

已在 Windows PowerShell 3.0 中引入了 File 参数。

若要仅获取文件,请使用 File 参数并省略 Directory 参数。 若要排除文件,请使用 Directory 参数并省略 File 参数,或者使用 Attributes 参数。

支持的 cmdlet

  • Get-ChildItem

隐藏 <SwitchParameter>

仅获取隐藏的文件和目录(文件夹)。 默认情况下,Get-ChildItem 仅获取非隐藏项。

已在 Windows PowerShell 3.0 中引入了 Hidden 参数。

若要仅获取隐藏项,请使用 Hidden 参数、其“h”或“ah”别名或 Attributes 参数的 Hidden 值。 若要排除隐藏项,请省略 Hidden 参数或使用 Attributes 参数。

支持的 cmdlet

  • Get-ChildItem

ReadOnly <SwitchParameter>

仅获取只读文件和目录(文件夹)。

已在 Windows PowerShell 3.0 中引入了 ReadOnly 参数。

若要仅获取只读项,请使用 ReadOnly 参数、其“ar”别名或 Attributes 参数的 ReadOnly 值。 若要排除只读项,请使用 Attributes 参数。

支持的 cmdlet

  • Get-ChildItem

系统 <SwitchParameter>

仅获取系统文件和目录(文件夹)。

已在 Windows PowerShell 3.0 中引入了 System 参数。

若要仅获取系统文件和文件夹,请使用 System 参数、其“as”别名或 Attributes 参数的 System 值。 若要排除系统文件和文件夹,请使用 Attributes 参数。

支持的 cmdlet

  • Get-ChildItem

NewerThan <DateTime>

如果文件的 $True 值大于指定日期时,将返回 LastWriteTime。 否则,它将返回 $False

输入一个 DateTime 对象(例如 Get-Date cmdlet 返回的对象),或者输入一个可转换为 DateTime 对象的字符串(例如“"August 10, 2011 2:00 PM"”)。

支持的 cmdlet

OlderThan <DateTime>

如果文件的 LastWriteTime 值小于指定日期,将返回“$True”。 否则,它将返回 $False

输入一个 DateTime 对象,例如 Get-Date cmdlet 返回的对象,或者输入一个可转换为 DateTime 对象的字符串,例如 "August 10, 2011 2:00 PM"

支持的 cmdlet

  • Test-Path

Stream <String>

管理备用数据流。 输入流名称。 仅在文件系统驱动器中的 Get-ItemRemove-Item 命令中允许使用通配符。

支持的 cmdlet

  • Add-Content
  • Clear-Content
  • Get-Item
  • Get-Content
  • Remove-Item
  • Set-Content

Raw <SwitchParameter>

忽略换行符。 返回作为单个项的内容。

支持的 cmdlet

  • Get-Content

ItemType <String>

可以使用此参数指定要使用 New-Item 创建的项的类型。

此参数的可用值取决于所使用的当前提供程序。

FileSystem 驱动器中,允许以下值:

  • 文件
  • Directory
  • SymbolicLink
  • 交接点
  • HardLink

支持的 cmdlet

  • New-Item

使用管道

提供程序 cmdlet 接受管道输入。 可以使用管道将提供程序数据从一个 cmdlet 发送到另一个提供程序 cmdlet 来简化任务。 若要详细了解如何将管道与提供程序 cmdlet 配合使用,请参阅本文中提供的 cmdlet 参考。

获取帮助

从 Windows PowerShell 3.0 开始,你可以获取有关提供程序 cmdlet 的自定义帮助主题,它们介绍了这些 cmdlet 在文件系统驱动器中的行为方式。

若要获取针对文件系统驱动器进行自定义的帮助主题,请在文件系统驱动器中运行 Get-Help 命令,或使用 Get-HelpPath 参数来指定文件系统驱动器。

Get-Help Get-ChildItem
Get-Help Get-ChildItem -Path c:

另请参阅