Active directory 不要在genericList中切断foldername

Active directory 不要在genericList中切断foldername,active-directory,powershell-2.0,acl,generic-list,Active Directory,Powershell 2.0,Acl,Generic List,我有一些代码,可以将特定用户对包含所有子文件夹的文件夹的权限写入通用列表。在代码的后面,我将打印此列表。但是,如果目录太大,超过4个文件夹,则名称会被截断。我需要写下整个目录名,而不仅仅是一个简短的版本。有什么参数可以使用吗 Import-Module ActiveDirectory $User = "Testumgebung\cbruehwiler" $UserOhneDomain = $User -creplace '^[^\\]*\\', '' $Path = "\\ESX-SHARE\

我有一些代码,可以将特定用户对包含所有子文件夹的文件夹的权限写入通用列表。在代码的后面,我将打印此列表。但是,如果目录太大,超过4个文件夹,则名称会被截断。我需要写下整个目录名,而不仅仅是一个简短的版本。有什么参数可以使用吗

Import-Module ActiveDirectory

$User = "Testumgebung\cbruehwiler"
$UserOhneDomain = $User -creplace '^[^\\]*\\', ''
$Path = "\\ESX-SHARE\File Transfer"

$List = New-Object System.Collections.Generic.List[System.Object]
$Groups = Get-ADPrincipalGroupMembership $UserOhneDomain 
$From = $User

$GroupArrayList = New-Object System.Collections.ArrayList
foreach ($Group in $Groups)
{
$GroupArrayList.Add($Group.Name) | Out-Null 
} 

$OutputFields = @(
    @{name="Item" ;       expression={$_.Path.split(':',3)[-1]}}
    @{name="Rights" ;     expression={$Right.FileSystemRights}}
    @{name="AccessType" ; expression={$Right.AccessControlType}}
    @{name="From" ;       expression={$From}}
) 

$FileSystemObjects = Get-ChildItem $Path -Recurse | ?{ $_.PSIsContainer } | ForEach-Object {Get-Acl $_.FullName}

foreach ($Item in $FileSystemObjects) {
    foreach ($Right in $Item.Access) {
        if ($Right.IdentityReference -eq $User -And ($Right.IsInherited -eq $false))
        {
            $From = $User
            $List.Add(($Item | Select-Object $OutputFields))
        }
        foreach ($GroupArrayItem in $GroupArrayList){
            if ($Right.IdentityReference -eq ("TESTUMGEBUNG\" + $GroupArrayItem) -And ($Right.IsInherited -eq $false)) 
            {
                $From = $GroupArrayItem
                $List.Add(($Item | Select-Object $OutputFields))
            }
        }
    }   
}

$List | Out-File C:\Users\cbruehwiler\Desktop\PermissionCheck.csv
$DateTime = Get-Date
$DateTime >> C:\Users\cbruehwiler\Desktop\PermissionCheck.csv
结果就是这样

Item                                                                   Rights                                    AccessType From             

----                                                                   ------                                    ---------- ----                                          
\\ESX-SHARE\File Transfer\TestFolder\Sub_Te...                         FullControl                                    Allow Testumgebung\cbruehwiler                      
但是我希望它是这样的

\\ESX-SHARE\File Transfer\TestFolder\Sub_TestFolder\Sub_Sub_TestFolder

提前感谢您

您正在输出到一个CSV文件,而没有输出文件。这是不正确的;您需要导出Csv。如果您想要一个合法的CSV文档,您还需要在最后一行中删除日期输出。您可以运行Get Item MyFile.csv | Format Table Name、CreationTime以在以后获取该信息;文件系统免费提供一些日期信息

这本身就是一个完整的解决方案。您的输出不会被截断。但如果可以的话,我想解释一下区别

Powershell具有一些默认操作,这些操作将挂接到您的代码段中。Out文件接受字符串内容,但您正在传递对象,所以PS将使用其默认格式设置程序。当管道中的第一项具有4个或更少的可见属性时,这将是Format Table,否则为Format List

Format表有一个-Wrap开关,它会导致溢出的内容被包装而不是截断。有时,使用-AutoSize也足以调整列宽,但这只会在问题是截断时起作用。格式列表将始终换行

如果您只需要一个属性,并且可以承受失去列标题的损失,请尝试选择Object-ExpandProperty项

正如我现在所希望的那样,这些格式化命令正在将结构化数据扁平化为文本,尽管是格式化文本。这总是会使您失去保真度,也会使您更难对数据进行任何进一步的操作。如果改用导出Csv,则可以稍后运行导入Csv以将数据作为结构化输出返回。此外,您还可以在Excel等中打开

警告:导出Csv不能很好地处理引号。如果这成为一个问题,请尝试导出CliXml,它使用特定于PS的XML方言,并提供最高的保真度,除非您愿意投入大量工作!当然,该命令的导入对应项是import-CliXml


导出Csv的最后一个提示:通常您不需要标题信息,因此请将其与-NoTypeInformation开关一起使用。

看起来您的一些代码丢失了……它不应该那么重要。我想这可能是语法问题,也可能是powershell的问题。这非常重要-如果这是在控制台中呈现对象时看到的,这是意料之中的-字符串不会被截断,但powershell中的格式化子系统会截断它们以在屏幕上腾出空间。如果您将数据导出到文本文件或csv,您可能会发现您的字符串完好无损,如何操作可能很重要,因此请使用您运行的确切步骤和命令更新您的帖子,以获得您描述的结果。谢谢。我不知道。