Powershell获取完整路径信息

时间:2014-09-23 17:54:33

标签: powershell

我有一个名为视频的目录。在这个目录里面,是各种相机的一堆子目录。我有一个脚本可以检查各个摄像机,并删除早于某个日期的录像。

我在获取相机的完整目录信息时遇到了一些麻烦。我使用以下内容来获取它:

#Get all of the paths for each camera
$paths = Get-ChildItem -Path "C:\Videos\" | Select-Object FullName

然后我遍历$ paths中的每个路径并删除我需要的任何内容:

foreach ($pa in $paths) {
    # Delete files older than the $limit.
    $file = Get-ChildItem -Path $pa -Recurse -Force | Where-Object { $_.PSIsContainer -and $_.CreationTime -lt $limit } 
    $file | Remove-Item -Recurse -Force
    $file | Select -Expand FullName | Out-File $logFile -append
}

当我运行脚本时,我收到的错误如下:

@{FullName=C:\Videos\PC1-CAM1}
Get-ChildItem : Cannot find drive. A drive with the name '@{FullName=C' does not exist.
At C:\scripts\BodyCamDelete.ps1:34 char:13
+     $file = Get-ChildItem -Path $pa -Recurse -Force | Where-Object { $_.PSIsCont ...
+             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : ObjectNotFound: (@{FullName=C:String) [Get-ChildItem], DriveNotFoundException
+ FullyQualifiedErrorId : DriveNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand

有没有办法剥离@ {FullName = off the Path?我想这可能是问题所在。

2 个答案:

答案 0 :(得分:5)

在您的情况下,$pa是一个具有FullName属性的对象。您访问的方式就是这样。

$file = Get-ChildItem -Path $pa.FullName -Recurse -Force | Where-Object { $_.PSIsContainer -and $_.CreationTime -lt $limit } 

然而,只更改此行并离开

会更简单
$paths = Get-ChildItem -Path "C:\Videos\" | Select-Object -ExpandProperty FullName

-ExpandProperty将返回字符串而不是Select-Object返回的对象。

答案 1 :(得分:2)

你快到了。你想要的是Select-Object的-ExpandProperty参数。这将返回该属性的值,而不是具有一个属性的FileInfo对象,该属性为FullName。这应该为你解决:

$paths = Get-ChildItem -Path "C:\Videos\" | Select-Object -ExpandProperty FullName

编辑:看起来Matt一分钟就打败了我。