PowerShell导出字符限制文件夹

时间:2014-06-05 03:40:15

标签: character powershell-v3.0 maxlength

这是我目前的代码:

$OutFile = "C:\Permissions.csv"
$Header = "Folder Path,IdentityReference,AccessControlType,IsInherited"
Del $OutFile
Add-Content -Value $Header -Path $OutFile 

$RootPath = "C:\Test Folder"
$Folders = dir $RootPath -recurse | where {$_.psiscontainer -eq $true} 

foreach ($Folder in $Folders){
$ACLs = get-acl $Folder.fullname | 
ForEach-Object { $_.Access  } | 
Where {$_.IdentityReference -notlike "*BUILTIN*" -and $_.IdentityReference -notlike "*NT AUTHORITY*"}
Foreach ($ACL in $ACLs){
$OutInfo = $Folder.Fullname + "," + $ACL.IdentityReference  + "," + $ACL.AccessControlType + "," + $ACL.IsInherited
Add-Content -Value $OutInfo -Path $OutFile
}}

我在此文件路径中设置了一些测试文件夹,其中一个超出了Powershell要深入研究的260个字符限制。

当我运行此代码时,PS会回复一条错误,指出路径太长,然后它会显示出有问题的文件路径的压缩版本。有没有办法让这条路径出来,这样我就可以使用$ RootPath对象中的长路径再次运行代码 - 这样它可以更深入了?

1 个答案:

答案 0 :(得分:1)

要获取短路径名称,您可以使用PowerShell Community Extensions中的Get-ShortPath(PSCX)

这是我的旧版本之一(我想象的不那么强大)

# Get the 8.3 short path of a file comming from the pipe (fileInfo or directoryInfo) or from a parameter (string)
Function Get-MyShortPath
{
  [CmdletBinding()]
  PARAM ([Parameter(mandatory=$true,ValueFromPipeline=$true)]
         $file)

  BEGIN
  {
    $fso = New-Object -ComObject Scripting.FileSystemObject
  }

  PROCESS
  {
    if ($file -is [String])
    {
      $file = Get-Item $file
    }

    If ($file.psiscontainer)
    {
      $fso.getfolder($file.fullname).shortPath
    }
    Else 
    {
      $fso.getfile($file.fullname).shortPath
    }
  }
}

用法:

  gci 'C:\Program Files (x86)' | Get-MyShortPath
  Get-MyShortPath 'C:\Program Files'