Windows 从Get-ChildItem-Path返回对象数组

Windows 从Get-ChildItem-Path返回对象数组,windows,powershell,file,directory,sysadmin,Windows,Powershell,File,Directory,Sysadmin,在powershell中,ls-R*.txt将按目录递归列出文件,或者更好的方法是: PS> Get-ChildItem -Path C:\Test -Name 日志 另一个文件.txt Command.txt CreateTestFile.ps1 ReadOnlyFile.txt 但我如何将其馈送到数组中?我想要一个文件对象本身的数组,查看: 获取子项C:\WINDOWS\System32*.txt-Recurse |选择对象全名 我正在从这些类型的命令中查找带有powershell的

在powershell中,ls-R*.txt将按目录递归列出文件,或者更好的方法是:

PS> Get-ChildItem -Path C:\Test -Name
日志

另一个文件.txt Command.txt CreateTestFile.ps1 ReadOnlyFile.txt 但我如何将其馈送到数组中?我想要一个文件对象本身的数组,查看:

获取子项C:\WINDOWS\System32*.txt-Recurse |选择对象全名

我正在从这些类型的命令中查找带有powershell的文件对象数组

可能更好的语法:

复制项-Filter*.txt-路径c:\data-Recurse-目标c:\temp\text

但我不想复制项目,我只想要一个对象,或者更确切地说,是一个对象数组。不是文件的路径,也不是文件,但可能是指向文件的powershell引用或指针

现在阅读手册。

Get ChildItem C:\test-Recurse将返回数组中的FileInfo和DirectoryInfo对象数组

我们可以在这里看到一个例子

Get-ChildItem "C:\test" -Recurse | %{
    $_.gettype()
}
返回

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     DirectoryInfo                            System.IO.FileSystemInfo
True     True     DirectoryInfo                            System.IO.FileSystemInfo
True     True     FileInfo                                 System.IO.FileSystemInfo
True     True     DirectoryInfo                            System.IO.FileSystemInfo
Get-ChildItem C:\test-Recurse将返回数组中的FileInfo和DirectoryInfo对象数组

我们可以在这里看到一个例子

Get-ChildItem "C:\test" -Recurse | %{
    $_.gettype()
}
返回

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     DirectoryInfo                            System.IO.FileSystemInfo
True     True     DirectoryInfo                            System.IO.FileSystemInfo
True     True     FileInfo                                 System.IO.FileSystemInfo
True     True     DirectoryInfo                            System.IO.FileSystemInfo
PowerShell cmdlet(如Get-ChildItem)可以输出任意数量的对象

获取ChildItem输出[System.IO.FileInfo]和/或[System.IO.DirectoryInfo]对象,具体取决于是否输出有关文件和/或目录的信息

要确定给定cmdlet的输出对象类型,请执行以下操作:

运行,例如Get命令Get-ChildItem.OutputType 如果这不起作用,或者要查看特定调用的输出类型,请使用 获取子项|获取成员。 Get Help-Full Get ChildItem也应该显示一个OUTPUTS部分,正如所显示的一样,尽管在Get ChildItem的情况下它不那么具体,因为Get ChildItem还与文件系统以外的提供程序一起工作。 当输出到管道时,每个输出对象都会单独传递到管道中的下一个命令,以便通常立即进行处理

当在变量$var=…中捕获输出时,应用以下逻辑:

如果输出两个或多个对象,则它们将收集在常规PowerShell数组中,该数组的类型为[object[],即使实际元素具有特定类型。 如果输出一个对象,则按原样输出;也就是说,它没有包装在数组中。 如果未输出任何对象,则会输出一个数组值null,[System.Management.Automation.Internal.AutomationNull]::Value,在大多数上下文中其行为类似于$null,并且不会导致任何可见的输出-有关详细信息,请参阅。 因此,当在变量中捕获时,给定命令可能会在特定情况下返回:

对象数组 单一物体 nothing[System.Management.Automation.Internal.AutomationNull]::值 要确保给定命令的输出始终被视为数组,您有两个选项:

使用@…,即:;e、 g

$fileSystemObjects=@Get ChildItem-Recurse-Filter*.txt 键入使用[array]约束目标变量,该数组等同于[object[],并且比[object[]更易于键入

[array]$fileSystemObjects=Get ChildItem-Recurse-Filter*.txt 也就是说,在PSv3+中,您通常不必担心给定的变量是包含单个标量值还是数组,因为标量可以隐式地被视为数组:您可以调用。即使在标量上也可以计数,并使用索引[0]、-1]-有关详细信息,请参阅

PowerShell cmdlet(如Get-ChildItem)可以输出任意数量的对象

获取ChildItem输出[System.IO.FileInfo]和/或[System.IO.DirectoryInfo]对象,具体取决于是否输出有关文件和/或目录的信息

要确定给定cmdlet的输出对象类型,请执行以下操作:

运行,例如Get命令Get-ChildItem.OutputType 如果这不起作用,或者要查看特定调用的输出类型,请使用 获取子项|获取成员。 Get Help-Full Get ChildItem也应该显示一个OUTPUTS部分,正如所显示的一样,尽管在Get ChildItem的情况下它不那么具体,因为Get ChildItem还与文件系统以外的提供程序一起工作。 当输出到管道时,每个输出对象都会单独传递到管道中的下一个命令,以便通常立即进行处理

当在变量$var=…中捕获输出时,应用以下逻辑:

如果输出两个或多个对象,则它们将收集在常规PowerShell数组中,该数组的类型为[object[],即使实际元素具有特定类型。 如果输出一个对象,则按原样输出;也就是说,它没有包装在数组中。 如果未输出任何对象,则会输出一个数组值null,[System.Management.Automation.Internal.AutomationNull]::Value,在大多数上下文中其行为类似于$null,并且不会导致任何可见的输出-有关详细信息,请参阅。 因此,当在变量中捕获时,给定命令可能会在特定情况下返回:

对象数组 单一物体 无[系统、管理、自动化、内部] utomationNull]::值 要确保给定命令的输出始终被视为数组,您有两个选项:

使用@…,即:;e、 g

$fileSystemObjects=@Get ChildItem-Recurse-Filter*.txt 键入使用[array]约束目标变量,该数组等同于[object[],并且比[object[]更易于键入

[array]$fileSystemObjects=Get ChildItem-Recurse-Filter*.txt

也就是说,在PSv3+中,您通常不必担心给定的变量是包含单个标量值还是数组,因为标量可以隐式地被视为数组:您可以调用。即使在标量上也可以计数,并使用索引[0],-1]-有关详细信息,请参阅。

get ChildItem C:\windows\system32-include*.txt-Recurse生成一个对象数组。我不确定您在这里得到的是什么。但是powershell会自动返回一个对象。你所要做的就是把它赋给一个变量$txtfiles=Get ChildItem C:\WINDOWS\System32*.txt-Recurse |选择对象全名。在这种情况下,$txtfiles将是一个数组对象。@AdminOfThings数组将包含System.IO.FileSystemInfo类型的对象?好的,这就是我需要知道的。get-ChildItem C:\windows\system32-include*.txt-Recurse生成一个对象数组。我不确定您在这里得到的是什么。但是powershell会自动返回一个对象。你所要做的就是把它赋给一个变量$txtfiles=Get ChildItem C:\WINDOWS\System32*.txt-Recurse |选择对象全名。在这种情况下,$txtfiles将是一个数组对象。@AdminOfThings数组将包含System.IO.FileSystemInfo类型的对象?好的,这就是我需要知道的。正是我需要知道的,谢谢。这是获取类型的标准习惯用法?这个答案有误导性,因为Get-ChildItem-Recurse有时不返回数组。请参阅mklement0的答案。@orionelenzil是一个强有力的词。他要求回答,我给了他一个。我的回答符合他的要求。他甚至在下面回答说谢谢,但这是他的头。有时并不总是需要或需要深入的解释。我不知道。如果c:\test只包含一个文件,则生成的类型为System.IO.FileSystemInfo。您可能认为“误导”这个词太强了。我之所以挑这个毛病,是因为这种特殊的行为已经让我绊倒了好几次——我编写脚本时,搜索返回了许多文件,一切正常,$x.Length等于项目数,等等,但是我的脚本运行在某个地方,搜索只返回一个项目,现在我的代码中断了$x、 长度是返回的一个文件的文件大小,等等。这正是我需要知道的,谢谢。这是获取类型的标准习惯用法?这个答案有误导性,因为Get-ChildItem-Recurse有时不返回数组。请参阅mklement0的答案。@orionelenzil是一个强有力的词。他要求回答,我给了他一个。我的回答符合他的要求。他甚至在下面回答说谢谢,但这是他的头。有时并不总是需要或需要深入的解释。我不知道。如果c:\test只包含一个文件,则生成的类型为System.IO.FileSystemInfo。您可能认为“误导”这个词太强了。我之所以挑这个毛病,是因为这种特殊的行为已经让我绊倒了好几次——我编写脚本时,搜索返回了许多文件,一切正常,$x.Length等于项目数,等等,但是我的脚本运行在某个地方,搜索只返回一个项目,现在我的代码中断了$x、 Length是返回的一个文件的文件大小,等等。好的,感谢您提供了关于如何处理类型和数组的指针。我喜欢Get Member命令。@Thufir;我的荣幸。您接受的答案告诉您哪些特定类型获得ChildItem返回,这可能是您想问的,但不是您问的。请考虑未来读者的观点。足够公平,我感谢你的答案的彻底性。在这一点上,我有点不知所措,但我希望不止一次地回到这一点上:好的,谢谢你提供了关于如何处理类型和数组的指导。我喜欢Get Member命令。@Thufir;我的荣幸。您接受的答案告诉您哪些特定类型获得ChildItem返回,这可能是您想问的,但不是您问的。请考虑未来读者的观点。足够公平,我感谢你的答案的彻底性。在这一点上我有点不知所措,但我希望不止几次地回到这一点上: