0

由于执行政策,面临小而繁忙的问题。

编写了一个 Powershell 脚本来使用“sharepointclientcomponents”下载 SharePoint 文件。

但是每次我们执行它时,都会抛出一个错误,说“未进行数字签名”。为此,每次都必须首先运行“Set -ExecutionPolicy RemoteSigned”。

有没有办法永久设置这个执行策略,以便我们可以安排代码?

您的想法将对我们有很大的帮助!

提前感谢一吨!!!!

这是我们尝试过的

    Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass 
    
    #Load SharePoint CSOM Assemblies
    Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll"
    Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.Runtime.dll"
     
    Function Download-FilesFromLibrary()
    {
        param
        (
            [Parameter(Mandatory=$true)] [string] $SiteURL,
            [Parameter(Mandatory=$true)] [string] $LibraryName,
            [Parameter(Mandatory=$true)] [string] $TargetFolder
        )
     
        Try {
            #Setup Credentials to connect
            $Username="xxx.yyyy@gmail.com"  
            $Password="X1234y"
            $securePassword = ConvertTo-SecureString $Password -AsPlainText -Force          
            #$Cred= Get-Credential
            $Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username, $securePassword)
     
            #Setup the context
            $Ctx = New-Object Microsoft.SharePoint.Client.ClientContext($SiteURL)
            $Ctx.Credentials = $Credentials
          
            #Get all files from the Library
            $List = $Ctx.Web.Lists.GetByTitle($LibraryName)
            $Ctx.Load($List)
            $Ctx.ExecuteQuery()
             
            #Get Files from the Folder
            $Folder = $List.RootFolder
            $FilesColl = $Folder.Files
            $Ctx.Load($FilesColl)
            $Ctx.ExecuteQuery()
            
            
            Write-host -f Green "All Files from Library '$LibraryName' Downloaded to Folder '$TargetFolder' Successfully!" $_.Exception.Message
            Write-host -f Green "Creating parameters file..." $_.Exception.Message
            $FileNameArray=@()
            $count=0
            $CountArray=@()
            $YearsArray=@()
            $PeriodArray=@()
            
            Foreach($File in $FilesColl)
            { 
                $FileName=$File.Name
                $FileNameYear=$FileName.SubString(4,4)
                $FileNamePeriod=$FileName.SubString(0,3)
                $TargetFile = $TargetFolder+$File.Name
                #Download the file
                $FileInfo = [Microsoft.SharePoint.Client.File]::OpenBinaryDirect($Ctx,$File.ServerRelativeURL)
                $WriteStream = [System.IO.File]::Open($TargetFile,[System.IO.FileMode]::Create)
                $FileInfo.Stream.CopyTo($WriteStream)
                $WriteStream.Close()
                $count+=1
                #"'$FileName'" Prints the File Names
                $FileNameArray+=@($FileName)
                $CountArray+=@($count)
                $YearsArray+=@($FileNameYear)
                $PeriodArray+=@($FileNamePeriod)
            }
             "File names stored in an array:"
             $FileNameArray
             "Count stored in an array:"
             $CountArray
             "Years stored in an array:"
             $YearsArray
             "Periods stored in an array:"
             $PeriodArray
             "Total no. of Files extracted:"
             $count
             If ($FileNameArray.Count -gt $CountArray.Count) {
              $limit = $FileNameArray.Count
             } Else {
              $limit = $CountArray.Count
             }
    
            $csv = For ($i = 0; $i -lt $limit; $i++) {
              New-Object -TypeName psobject -Property @{
              'Serial' = $(If ($CountArray[$i]) { $CountArray[$i] })
              'File_Names' = $(If ($FileNameArray[$i]) { $FileNameArray[$i] })
              'Years' = $(If ($YearsArray[$i]) { $YearsArray[$i] })
              'Period' = $(If ($PeriodArray[$i]) { $PeriodArray[$i] })
              'Count' = $(If ($count) { $count })
              }
            }
            $csv | Export-CSV "D:\info.csv" -NoTypeInformation
            Write-host -f Green "Parameters File Created Successfully!" $_.Exception.Message
      }
        Catch {
            write-host -f Red "Error Downloading Files from Library!" $_.Exception.Message
        }
    }
     
    #Set parameter values
    $SiteURL="https://yyyy.sharepoint.com/sites/XXXX/"
    $LibraryName="test_library"
    $TargetFolder="D:\"
     
    #Call the function to download file
    Download-FilesFromLibrary -SiteURL $SiteURL -LibraryName $LibraryName -TargetFolder $TargetFolder
4

1 回答 1

0

请尝试将代码第一行中的“Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass”替换为“Set-ExecutionPolicy Bypass -Scope Process -Force”,它将帮助您永久设置此执行策略。

以下是修改后的代码:

Set-ExecutionPolicy Bypass  -Scope Process -Force 
    
    #Load SharePoint CSOM Assemblies
    Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll"
    Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.Runtime.dll"
     
    Function Download-FilesFromLibrary()
    {
        param
        (
            [Parameter(Mandatory=$true)] [string] $SiteURL,
            [Parameter(Mandatory=$true)] [string] $LibraryName,
            [Parameter(Mandatory=$true)] [string] $TargetFolder
        )
     
        Try {
            #Setup Credentials to connect
            $Username="xxx.yyyy@gmail.com"  
            $Password="X1234y"
            $securePassword = ConvertTo-SecureString $Password -AsPlainText -Force          
            #$Cred= Get-Credential
            $Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username, $securePassword)
     
            #Setup the context
            $Ctx = New-Object Microsoft.SharePoint.Client.ClientContext($SiteURL)
            $Ctx.Credentials = $Credentials
          
            #Get all files from the Library
            $List = $Ctx.Web.Lists.GetByTitle($LibraryName)
            $Ctx.Load($List)
            $Ctx.ExecuteQuery()
             
            #Get Files from the Folder
            $Folder = $List.RootFolder
            $FilesColl = $Folder.Files
            $Ctx.Load($FilesColl)
            $Ctx.ExecuteQuery()
            
            
            Write-host -f Green "All Files from Library '$LibraryName' Downloaded to Folder '$TargetFolder' Successfully!" $_.Exception.Message
            Write-host -f Green "Creating parameters file..." $_.Exception.Message
            $FileNameArray=@()
            $count=0
            $CountArray=@()
            $YearsArray=@()
            $PeriodArray=@()
            
            Foreach($File in $FilesColl)
            { 
                $FileName=$File.Name
                $FileNameYear=$FileName.SubString(4,4)
                $FileNamePeriod=$FileName.SubString(0,3)
                $TargetFile = $TargetFolder+$File.Name
                #Download the file
                $FileInfo = [Microsoft.SharePoint.Client.File]::OpenBinaryDirect($Ctx,$File.ServerRelativeURL)
                $WriteStream = [System.IO.File]::Open($TargetFile,[System.IO.FileMode]::Create)
                $FileInfo.Stream.CopyTo($WriteStream)
                $WriteStream.Close()
                $count+=1
                #"'$FileName'" Prints the File Names
                $FileNameArray+=@($FileName)
                $CountArray+=@($count)
                $YearsArray+=@($FileNameYear)
                $PeriodArray+=@($FileNamePeriod)
            }
             "File names stored in an array:"
             $FileNameArray
             "Count stored in an array:"
             $CountArray
             "Years stored in an array:"
             $YearsArray
             "Periods stored in an array:"
             $PeriodArray
             "Total no. of Files extracted:"
             $count
             If ($FileNameArray.Count -gt $CountArray.Count) {
              $limit = $FileNameArray.Count
             } Else {
              $limit = $CountArray.Count
             }
    
            $csv = For ($i = 0; $i -lt $limit; $i++) {
              New-Object -TypeName psobject -Property @{
              'Serial' = $(If ($CountArray[$i]) { $CountArray[$i] })
              'File_Names' = $(If ($FileNameArray[$i]) { $FileNameArray[$i] })
              'Years' = $(If ($YearsArray[$i]) { $YearsArray[$i] })
              'Period' = $(If ($PeriodArray[$i]) { $PeriodArray[$i] })
              'Count' = $(If ($count) { $count })
              }
            }
            $csv | Export-CSV "D:\info.csv" -NoTypeInformation
            Write-host -f Green "Parameters File Created Successfully!" $_.Exception.Message
      }
        Catch {
            write-host -f Red "Error Downloading Files from Library!" $_.Exception.Message
        }
    }
     
    #Set parameter values
    $SiteURL="https://yyyy.sharepoint.com/sites/XXXX/"
    $LibraryName="test_library"
    $TargetFolder="D:\"
     
    #Call the function to download file
    Download-FilesFromLibrary -SiteURL $SiteURL -LibraryName $LibraryName -TargetFolder $TargetFolder
于 2022-03-03T03:09:47.443 回答