Добавление PSCustomObject в массив дает ошибку, но отлично работает при отладке кода в Powershell - PullRequest
0 голосов
/ 09 июля 2020

Я знаю, что на этот вопрос уже дан ответ, но этот вопрос не ответил на мой вопрос. Ссылка: Добавление PSCustomObject в массив дает ошибку, но отлично работает при отладке кода в Visual Studio Code Когда я пытаюсь запустить сценарий, он отлично работает в режиме отладки, но не работает, если я выполняю напрямую.

$path = Split-Path $script:MyInvocation.MyCommand.Path
$output_File = $path + "\$outputFile_Name"
$report = @()

function Folder-Access
{
    [CmdletBinding()]
    Param
    (
        [Parameter(Mandatory=$true, Position=0)]
        [string]$prod_path,

        [Parameter(Mandatory=$true, Position=1)]
        [string]$non_prod_path
    )

    Write-Host "`$prod_path value: $prod_path"
    Write-Host "`$non_prod_path value: $non_prod_path"

    try {
    
        $prod_acl = get-acl $prod_path
        $nonProd_acl = Get-Acl $non_prod_path
        $arr = @()



        foreach ($non_prod_usr in ($nonProd_acl.access) ) {
   
            $x = $non_prod_usr.IdentityReference.Value
            $arr += $x
        
            }

       foreach ($usr in ($prod_acl.Access)){
        

            $dirObj = New-Object psobject
            if ($usr.IdentityReference.Value -in $arr) {
            
                echo "Do Nothing."
            
            } else {
            
                if ($usr.IdentityReference.Value -ne 'BUILTIN\Administrators') {

                    if ($usr.IdentityReference.Value -ne 'S-1-5-21-2554127390-2720852439-1129525235-1959308') {
                      
                      $properties = [ordered]@{'Foldername'=$non_prod_path; 'AD Group'=$usr.IdentityReference.Value;
                                               'Permissions'=$usr.Filesystemrights}

                      echo "Do Something."               
                      $usr.IdentityReference.Value
                     
                      #$dirObj | Add-Member -MemberType NoteProperty -Name "Foldername" -Value $non_prod_path
                      #$dirObj | Add-Member -MemberType NoteProperty -Name 'AD Group' -Value $usr.IdentityReference.Value
                      #$dirObj | Add-Member -MemberType NoteProperty -Name 'Permissions' -Value $usr.Filesystemrights
                      #$report += $dirObj
                      $report += New-Object -TypeName psobject -Property $properties
                      
                     }
                }
                
              }
                #$report += New-Object -TypeName psobject -Property $properties              
                
            } $report | Export-Csv -Path 'C:\Powershell\output.csv' -Append -NoTypeInformation -Encoding UTF8
             
         
    } 
    catch { 
    
            Write-Host "Error occured " + $_ -ForegroundColor Red
            
            }
}

function executionTimeForSourcePath {

    try {
            
            $Prod_Folder_Path = Get-ChildItem -Directory -Path $prod_path -Recurse -Force 
            
            $Prod_Folder_Path | ForEach-Object {

            if (-not ([string]::IsNullOrEmpty($_.FullName))){
        
                $path = $_.FullName
                $folderName = $path.Replace($prod_path + '\',"")
        
                if (-Not (Test-Path "$non_prod_path\$folderName")){
                    
                    try {
        
                        New-Item -ItemType Dir -Path "$non_prod_path\$folderName" -ErrorAction Stop
        
                            if (Test-Path "$non_prod_path\$folderName"){
        
                                Folder-Access -prod_path $path -non_prod_path "$non_prod_path\$folderName"
                            }
                        } 
                    catch {
                            Write-Host $_ -ForegroundColor Red
                            }
                    }
                
                ElseIf (Test-Path "$non_prod_path\$folderName") {
                
                    Folder-Access -prod_path $path -non_prod_path "$non_prod_path\$folderName"
                    
                    }


                } }

         } catch { $_ }

}


echo "Script started.."
executionTimeForSourcePath

Было бы здорово, если бы кто-нибудь мог направить меня сюда, пожалуйста. Я перепробовал все возможные способы, но ни один из них не помог. Ошибка: Вызов метода завершился неудачно из-за [System.Management.Automation. PSObject] не содержит метода с именем op_Addition.

...