FileSystem 提供程序

提供程序名称

FileSystem

驱动器

C:, D: ...

功能

FilterShouldProcess

简短说明

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

详细说明

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

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

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.txtC:\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:使用 little-endian 字节顺序以 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

隐藏 <System.Management.Automation.SwitchParameter>

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

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

若要仅获取隐藏项,请使用-Hidden参数、参数hah别名或参数的-Attributes“隐藏”值。 若要排除隐藏项,请省略 -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>

当文件的值小于指定日期时LastWriteTime返回$True。 否则,将返回 $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