about_FileSystem_Provider

提供程序名称

FileSystem

驱动器

C:, D:, Temp: ...

功能

FilterShouldProcess

简短说明

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

详细说明

借助 PowerShell FileSystem 提供程序,可以在 PowerShell 中获取、添加、更改、清除和删除文件和目录。

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

从 PowerShell 版本 7.0 开始,调用 TEMP: 的驱动器将映射到用户的临时目录路径。 PowerShell 使用 .NET GetTempPath () 方法来确定临时文件夹的位置。 在 Windows 上,位置与 $env:TEMP. 在非 Windows 系统上,该位置与 $env:TMPDIR 未定义环境变量相同或 /tmp 是否定义。

FileSystem 提供程序支持本文中介绍的以下 cmdlet。

此提供程序公开的类型

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

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

Set-Location C:

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

注意

PowerShell 使用别名来熟悉使用提供程序路径的方法。 Get-ChildItem 的命令(例如dirls,现在是 Get-ChildItemcd 的别名)是 Set-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 在不提示确认的情况下覆盖目标目录中的文件。

此命令将 a.txt 文件从 C:\a 目录复制到目录 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.txtC:\a目录中的文件移动到C:\a\aa目录:

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

该命令将不会自动覆盖现有的同名文件。 若要强制该 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.txt 文件中:

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

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

替换文件的内容

此命令将文件的内容 Test.txt 替换为“测试内容”字符串:

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

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

循环访问文件的内容

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

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

第一个命令获取 Employees.txt 文件并将其拆分为各节,每个部分以“员工记录结束”一词结尾,并将其保存在变量中 $e

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

有关 cmdlet 的详细信息 Get-Content ,请参阅 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 类。

修改文件的 ACL

为文件创建和设置 ACL

创建文件和目录

创建目录

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

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

PowerShell 还包括使用 mkdirNew-Item cmdlet 创建新目录的函数 (别名md) 。

创建文件

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

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

创建具有内容的文件

在目录中创建一个调用log2.txtC:\logfiles的文件,并将字符串“测试日志”添加到该文件。

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

重命名文件和目录

重命名文件

此命令将 a.txt 目录中的文件 C:\a 重命名为 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 打开 services.csv.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 具有两个值的参数, Compressed 以及 Encrypted。 这些值用表示“OR”运算符的逗号 , 分隔。

Get-ChildItem -Attributes Compressed,Encrypted

动态参数

动态参数是 PowerShell 提供程序添加的 cmdlet 参数,仅在启用提供程序的驱动器中使用 cmdlet 时才可用。

编码 <Microsoft.PowerShell.Commands.FileSystemCmdletProviderEncoding>

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

  • ASCII:使用 ASCII (7 位) 字符集的编码。
  • BigEndianUnicode:使用 big-endian 字节顺序以 UTF-16 格式编码。
  • 字符串:对字符串使用编码类型。
  • Unicode:使用小端字节顺序以 UTF-16 格式编码。
  • UTF7:采用 UTF-7 格式编码。
  • UTF8:采用 UTF-8 格式编码。
  • UTF8BOM:使用字节顺序标记 (BOM) UTF-8 格式进行编码
  • UF8NOBOM:在没有字节顺序标记的情况下以 UTF-8 格式编码 (BOM)
  • UTF32:采用 UTF-32 格式编码。
  • 默认值:在默认安装的代码页中编码。
  • OEM:对 MS-DOS 和控制台程序使用默认编码。
  • 未知:编码类型未知或无效。 数据可作为二进制处理。

支持的 Cmdlet

<分隔符 System.String>

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

默认值为 \n行尾字符。

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

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

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

注意

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

支持的 Cmdlet

等待 <System.Management.Automation.SwitchParameter>

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

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

支持的 Cmdlet

Attributes <FlagsExpression>

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

参数-Attributes是在 Windows PowerShell 3.0 中引入的。

-Attributes 参数支持以下属性:

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

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

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

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

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

支持的 Cmdlet

Directory <System.Management.Automation.SwitchParameter>

获取目录(文件夹)。

参数-Directory是在 Windows PowerShell 3.0 中引入的。

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

支持的 Cmdlet

File <System.Management.Automation.SwitchParameter>

获取文件。

参数-File是在 Windows PowerShell 3.0 中引入的。

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

支持的 Cmdlet

Hidden <System.Management.Automation.SwitchParameter>

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

参数-Hidden是在 Windows PowerShell 3.0 中引入的。

若要仅获取隐藏项,请使用-Hidden参数、参数或hah别名或参数的 -AttributesHidden 值。 若要排除隐藏项,请省略 -Hidden 参数或使用 -Attributes 参数。

支持的 Cmdlet

ReadOnly <System.Management.Automation.SwitchParameter>

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

参数-ReadOnly是在 Windows PowerShell 3.0 中引入的。

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

支持的 Cmdlet

System.Management.Automation.SwitchParameter <>

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

参数-System是在 Windows PowerShell 3.0 中引入的。

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

支持的 Cmdlet

NewerThan <System.DateTime>

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

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

支持的 Cmdlet

OlderThan <System.DateTime>

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

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

支持的 Cmdlet

Stream <System.String>

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

支持的 Cmdlet

原始 <SwitchParameter>

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

支持的 Cmdlet

ItemType <字符串>

此参数允许指定要创建的项的 tye New-Item

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

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

  • 文件
  • Directory
  • 符号链接
  • 交接点
  • HardLink

支持的 Cmdlet

使用管道

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

获取帮助

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

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

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

请参阅

about_Providers