FileSystem 提供程序
提供程序名称
FileSystem
驱动器
C:
, D:
...
功能
Filter、 ShouldProcess
简短说明
提供对文件和目录的访问权限。
详细说明
借助 PowerShell FileSystem 提供程序,可以在 PowerShell 中获取、添加、更改、清除和删除文件和目录。
FileSystem 驱动器是一个分层命名空间,其中包含计算机上的目录和文件。 FileSystem 驱动器可以是逻辑或逻辑驱动器、目录或映射网络共享。
FileSystem 提供程序支持本文中介绍的以下 cmdlet。
- Get-Location
- Set-Location
- Get-Item
- Get-ChildItem
- Invoke-Item
- Move-Item
- New-Item
- Remove-Item
- Get-ItemProperty
- Set-ItemProperty
- Clear-Item
- Clear-ItemProperty
- Remove-Item
- Remove-ItemProperty
- Get-Acl
- Set-Acl
- Get-AuthenticodeSignature
- Set-AuthenticodeSignature
此提供程序公开的类型
文件是 System.IO.FileInfo 类的实例。 目录是 System.IO.DirectoryInfo 类的实例。
导航 FileSystem 驱动器
FileSystem 提供程序通过将计算机上的任何逻辑驱动器映射为 PowerShell 驱动器来公开其数据存储。 若要使用 FileSystem 驱动器,可以将位置更改为驱动器名称后跟冒号 (:
) 的驱动器。
Set-Location C:
还可以使用任何其他 PowerShell 驱动器中的 FileSystem 提供程序。 若要从其他位置引用文件或目录,请在路径中使用驱动器名称 (C:
、 D:
、...) 。
注意
PowerShell 使用别名使你能够熟悉地使用提供程序路径。 和 ls
等dir
命令现在是 Get-ChildItem 的别名,cd
是 Set-Location 的别名。 和 pwd
是 Get-Location 的别名。
获取文件和目录
cmdlet Get-ChildItem
返回当前位置中的所有文件和目录。 可以指定不同的搜索路径,并使用内置参数来筛选和控制递归深度。
Get-ChildItem
若要详细了解 cmdlet 用法,请参阅 Get-ChildItem。
复制文件和目录
cmdlet Copy-Item
将文件和目录复制到指定的位置。
参数可用于筛选和递归,类似于 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.txt
目录中的文件 C:\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
Create并设置文件的 ACL
创建文件和目录
创建目录
此命令在 logfiles
驱动器上 C
创建目录:
New-Item -Path c:\ -Name logfiles -Type directory
PowerShell 还包括一个 mkdir
函数 (别名 md
) ,该函数使用 New-Item cmdlet 创建新目录。
创建文件
此命令在 目录中创建 log2.txt
文件, C:\logfiles
然后将“测试日志”字符串添加到该文件:
New-Item -Path c:\logfiles -Name log2.txt -Type file
创建具有内容的文件
在 目录中创建名为 log2.txt
的文件, C:\logfiles
并将字符串“test log”添加到该文件。
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:使用 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
Wait <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 枚举。
使用以下运算符合并属性。
!
-不+
-和,
-或
运算符与其属性之间不允许有空格。 但是,在逗号之前允许有空格。
支持的 Cmdlet
目录 <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
参数、其 h
或 ah
别名,或 参数的 -Attributes
Hidden 值。 若要排除隐藏项,请省略 -Hidden
参数或使用 -Attributes
参数。
支持的 Cmdlet
ReadOnly <System.Management.Automation.SwitchParameter>
仅获取只读文件和目录(文件夹)。
参数-ReadOnly
是在 Windows PowerShell 3.0 中引入的。
若要仅获取只读项,请使用 -ReadOnly
参数、其ar
别名或 参数的 -Attributes
ReadOnly 值。 若要排除只读项,请使用 -Attributes
参数。
支持的 Cmdlet
System <System.Management.Automation.SwitchParameter>
仅获取系统文件和目录(文件夹)。
参数-System
是在 Windows PowerShell 3.0 中引入的。
若要仅获取系统文件和文件夹,请使用 -System
参数、其as
别名或 参数的 -Attributes
System 值。 若要排除系统文件和文件夹,请使用 -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-Item 和 Remove-Item 命令中才允许使用通配符。
支持的 Cmdlet
原始 <SwitchParameter>
忽略换行符。 返回作为单个项的内容。
支持的 Cmdlet
ItemType <字符串>
使用此参数可以指定要创建的项的 tye New-Item
此参数的可用值取决于所使用的当前提供程序。
FileSystem
在驱动器中,允许使用以下值:
- 文件
- Directory
- SymbolicLink
- 交接点
- HardLink
支持的 Cmdlet
使用管道
提供程序 cmdlet 接受管道输入。 可以使用管道通过将提供程序数据从一个 cmdlet 发送到另一个提供程序 cmdlet 来简化任务。 若要详细了解如何将管道与提供程序 cmdlet 配合使用,请参阅本文中提供的 cmdlet 参考。
获取帮助
从 Windows PowerShell 3.0 开始,你可以获取有关提供程序 cmdlet 的自定义帮助主题,它们介绍了这些 cmdlet 在文件系统驱动器中的行为方式。
若要获取为文件系统驱动器自定义的帮助主题,请在文件系统驱动器中运行 Get-Help 命令,或使用 -Path
Get-Help 的 参数指定文件系统驱动器。
Get-Help Get-ChildItem
Get-Help Get-ChildItem -Path c: