Search code examples
powershellsharepointonedrivepowershell-4.0

Connection to OneDrive issue in PowerShell


I have this script running in VSCode but different $SiteURL. I open this script again in ISE and change the $SiteUR $searchfor and $folderpath. The issue I have is everytime I run in ISE and when it's doing Get-PnPListItem, it's getting an items from the path that I provided in the VSCode. Not sure what is going on so I would be really appreciated if I can get any help or suggestion.

$SiteURL = "https://companyName-my.sharepoint.com/personal/user_id"
$searchfor  = "/personal/user_id/Documents/Pkmon"
$folderpath = "Documents/Pkmon"
$CSVFile = "C:\Users\user\Desktop\Resource\FolderStats.csv"

#Connect to SharePoint Online
Connect-PnPOnline $SiteURL -useWebLogin

$FolderItems = Get-PnpListItem -List $folderpath -PageSize 2000 -Fields ID, FileDirRef, FileRef -ScriptBlock `
    { Param($items) $global:counter += $items.Count; Write-Progress -PercentComplete ($global:Counter / ($List.ItemCount) * 100) -Activity `
            "Getting Items from Folder '$FolderServerRelativeURL'" -Status "Getting Items $global:Counter of $($List.ItemCount)"; }
 

$fieldvalues = $FolderItems.Fieldvalues

$result = @()
foreach ($field in $fieldvalues) {
    $obj = New-object psobject -property $field 
    $result += $obj.fileref
}

$final = $result | where-object {$_ -match $searchfor}

$item = New-Object psobject -Property @{
    FolderName     = Split-Path -Path $searchfor -Leaf 
    URL            = $searchfor 
    filesfoldercount = $final.count
}

$item 
$item  |  Export-Csv -Path $CSVFile -NoTypeInformation

Solution

  • You can capture the connection object in a variable like

    $thisConnection = Connect-PnPOnline $SiteURL -useWebLogin -ReturnConnection
    

    -ReturnConnection acts as what is normally called -PassThru. It makes the cmdlet return the connection object for use with the -Connection parameter on other cmdlets.

    Then use that in parameter -Connection of the Get-PnpListItem cmdlet:

    $FolderItems = Get-PnpListItem -List $folderpath -Connection $thisConnection ...
    

    You may also need to specify the connection in the VSCode instance.
    When done, disconnect using Disconnect-PnPOnline -Connection $thisConnection