0 Comments

Powershell Script to replace the string

I need to write a powershell script to replace the string in sharepoint.

[boolean]$DebugGlobalMode = $True #$False
[string]$username = "Admin@yourtenant.onmicrosoft.com"
 [string]$PwdTXTPath = "C:\SECUREDPWD\ExportedPWD-$($username).txt"
[string]$CSVFolderReport = "C:\SHAREPOINT\Reports\"
[string]$AdminTenantURL = "https://YourTenant-admin.sharepoint.com"
 function Load-DLLandAssemblies
{
 [string]$defaultDLLPath = ""
  # Load assemblies to PowerShell session 
  $defaultDLLPath = "C:\Program Files\SharePoint Online Management Shell\Microsoft.Online.SharePoint.PowerShell\Microsoft.SharePoint.Client.dll"
 [System.Reflection.Assembly]::LoadFile($defaultDLLPath)
  $defaultDLLPath = "C:\Program Files\SharePoint Online Management Shell\Microsoft.Online.SharePoint.PowerShell\Microsoft.SharePoint.Client.Runtime.dll"
 [System.Reflection.Assembly]::LoadFile($defaultDLLPath)
  $defaultDLLPath = "C:\Program Files\SharePoint Online Management Shell\Microsoft.Online.SharePoint.PowerShell\Microsoft.Online.SharePoint.Client.Tenant.dll"
 [System.Reflection.Assembly]::LoadFile($defaultDLLPath)
}
 function Get-SPOWebs(){
param(
 $Url = $(throw "Please provide a Site Collection Url"),
 $Credential = $(throw "Please provide a Credentials")
)
  $context = New-Object Microsoft.SharePoint.Client.ClientContext($Url)
 $context.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Credential.UserName,$Credential.Password)
 $context.RequestTimeout = 1000000 # milliseconds
 $web = $context.Web
 $context.Load($web)
 $context.Load($web.Webs)
 $context.ExecuteQuery()
 foreach($myweb in $web.Webs)
 {
  Get-SPOWebs -Url $myweb.Url -Credential $Credential
  $myweb
 }
}
 function Check-InfoPath-Usage($myspoWebSite, $myspcontext)
{
 [string]$InfotpathStatus = ""
 [boolean]$DebugMode = $false #$DebugGlobalMode
 $AllspwebLists = $myspoWebSite.lists
 $myspcontext.Load($AllspwebLists)
 $myspcontext.ExecuteQuery()
 Write-Host " ---------------------------------------------- "
 if($DebugMode) {Write-Host "         -->InfoPath:",$($myspoWebSite.Id), "-",$($myspoWebSite.Url), "-",$($myspoWebSite.Title) -ForegroundColor Yellow}
 foreach($myList in $AllspwebLists)
 {
  $myspcontext.Load($myList)
  $myspcontext.ExecuteQuery()
  $listTitle = $myList.Title
  $listType = $myList.BaseTemplate
  $listUrl = $myList.DefaultViewUrl
  try
  {
   if($DebugMode) {Write-Host "         -->Infopath: List Check", $listTitle, "(", $listType, ") at WebURL", $myspoWebSite.url -ForegroundColor Green}
   if($listType -eq 100 -or $listType -eq 101)
   {
    if($DebugMode) {Write-Host "            -->Infopath: Line 70 - listType:", $listType}
    $isSysList = $myList.IsSystemList
    $IswebCatalog =  $myList.IsCatalog
    $IsAppList =  $myList.IsApplicationList
    $listForms = $myList.Forms
    $myspcontext.Load($listForms)
    $myspcontext.ExecuteQuery()
    if($DebugMode) {Write-Host "            -->Infopath: Line 77 - isSysList:", $isSysList}
    if($DebugMode) {Write-Host "            -->Infopath: Line 78 - IsCatalog:", $IswebCatalog}
    if($DebugMode) {Write-Host "            -->Infopath: Line 79 - IsApplicationList:", $IsAppList}
    if($isSysList -or $IswebCatalog -or $IsAppList)
    {
     if($DebugMode) {Write-Host "            -->Infopath: System, Application or Catalog List Ignore", $listTitle, "at URL", $myspoWebSite.url -ForegroundColor Yellow}
    }
    else
    {
     if($listType -eq 101)
     {
      if($DebugMode) {Write-Host "            -->Infopath: Line 88 - listType:",  $listType}
      if($myList.AllowContentTypes)
      {
       if($DebugMode) {Write-Host "            -->Infopath: Line 89 - AllowContentTypes:", $myList.AllowContentTypes}
       $contentTyps = $myList.ContentTypes
       $myspcontext.Load($contentTyps)
       $myspcontext.ExecuteQuery()
       forEach($contType in $contentTyps)
       {
        if($DebugMode) {Write-Host "            -->Infopath: Line 97 - contType.Name:", $contType.Name}
        if($contType.Name -eq "Form")
        {
         Write-Host "            -->InfoPath: Found in Library", $listTitle, "at URL", $myspoWebSite.url -ForegroundColor Magenta
         $InfotpathStatus += "Infopath:"+ $myspoWebSite.url +";"
        }
       }
      }
      if($DebugMode) {Write-Host "            -->Infopath: Line 105 - listType:", $listType}
     }
     else
     {
      forEach($listFm in $listForms)
      {
       $listPath = $listFm.ServerRelativeUrl
       if($DebugMode) {Write-Host "            -->Infopath: Line 112 - listPath:", $listPath}
       if ($listPath -like '*displayifs.aspx')
       {
        Write-Host "            -->InfoPath: Found in List", $listTitle, "at URL", $myspoWebSite.url -ForegroundColor Magenta
        $InfotpathStatus += "Infopath:"+ $myspoWebSite.url +";"
       }
      }
     }
    }
    }
  }
  catch
  {
   Write-Host "         -->Infopath: Error Check for list:",  $listTitle -ForegroundColor Red
   Write-Host "             ErrorMessage:", $_.Exception -ForegroundColor Red
  }
    }
  return $InfotpathStatus
}
 function Check-SPWorkflow($myspoWebSite, $myspcontext)
{
 [string]$WorkflowStatus = ""
 [boolean]$DebugMode = $false #$DebugGlobalMode
 $AllspwebLists = $myspoWebSite.lists
 $myspcontext.Load($AllspwebLists)
 $myspcontext.ExecuteQuery()
 if($DebugMode) {Write-Host "         --> WorkFlow: ",$($myspoWebSite.Id), "-",$($myspoWebSite.Url), "-",$($myspoWebSite.Title) -ForegroundColor Yellow}
 foreach($list in $AllspwebLists)
 {
  if($DebugMode) {Write-Host "         -->SPWorkflow: List Check", $list.Title, " at WebURL", $myspoWebSite.url -ForegroundColor Green}
  try
  {
   $myspcontext.Load($list.WorkflowAssociations)
   $myspcontext.ExecuteQuery()
   foreach($wfAssociation in $list.WorkflowAssociations)
   {
    if($DebugMode) {Write-Host "                 -->SPWorkflow: List ", $list.Title, "- Wokflow:", $wfAssociation.Name -ForegroundColor Magenta}
    $WorkflowStatus += "`"$($list.Title)`",`"$($wfAssociation.Name)`",`"$($wfAssociation.TaskListTitle)`","
    #$WorkflowStatus += "`"$($wfAssociation.HistoryListTitle)`",$($wfAssociation.Created),$($wfAssociation.Modified)"
   }  
  }
  catch
  {
   Write-Host "         -->WorkFlowCHeck: Error Check for list:",  $list.Title -ForegroundColor Red
   Write-Host "             ErrorMessage:", $_.Exception -ForegroundColor Red
  }
 }
 return $WorkflowStatus
}
 cls
Write-Host " ---------------------------------------------- "
Load-DLLandAssemblies
Write-Host " ---------------------------------------------- "
 $secureStringPwd = ConvertTo-SecureString -string (Get-Content $PwdTXTPath)
$adminCreds = New-Object System.Management.Automation.PSCredential $username, $secureStringPwd
#$adminCreds = get-credential
 Connect-SPOService -Url $AdminTenantURL -credential $adminCreds -ErrorAction SilentlyContinue -ErrorVariable Err
 $data = @()
 #Retrieve all site collection infos
#$sitesInfo = Get-SPOSite -Limit 10 | Sort-Object -Property url | Select *
#$sitesInfo = Get-SPOSite -Template "STS#0" -Limit 10 | Sort-Object -Property url | Select *
$sitesInfo = Get-SPOSite -Limit ALL | Sort-Object -Property url | Select *
 [int]$i = 1;
[string]$CheckInfoPathStatus = ""
[string]$CheckWorkFlowStatus = ""
$data = @()
 Write-Host "--------------------------------------------------------------------------------------------"
#Retrieve and print all sites
foreach ($site in $sitesInfo)
{
 Write-Host "SiteColl Number:", $i, "- of:", $sitesInfo.Count;
    $i += 1;
 $RootSiteCreatedDate = get-date "1900-01-01"
 try
 {
  $Rootcontext = New-Object Microsoft.SharePoint.Client.ClientContext($site.Url)
  $Rootcontext.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($adminCreds.UserName,$adminCreds.Password)
  $Rootcontext.RequestTimeout = 1000000 # milliseconds
  $RootWeb = $Rootcontext.web
  $Rootcontext.Load($RootWeb)
  $Rootcontext.ExecuteQuery()
  $RootSiteCreatedDate = $RootWeb.Created
  $CheckInfoPathStatus = Check-InfoPath-Usage $RootWeb $Rootcontext
  $CheckWorkFlowStatus = Check-SPWorkflow $RootWeb $Rootcontext
 }
 catch
 {
  Write-host "  =====>>>> Impossible to get the RootSite " -ForegroundColor Red
  Write-host "  =====>>>> RootSite:", $site.Url -ForegroundColor Yellow
 }
    Write-Host "SPO Site collection:", $site.Url, "- Title:", $site.Title
 Write-Host "   => Creation Date:", $RootSiteCreatedDate, "- LastItemModifiedDate", $site.LastContentModifiedDate
 Write-Host "   => External Sharing:", $site.SharingCapability
 Write-Host "   => Site Template Used:", $site.Template
 Write-Host "   => Storage Quota:", $site.StorageQuota
 Write-Host "   => Storage used:", $site.StorageUsageCurrent
 Write-Host "   => Storage Warning Level:", $site.StorageQuotaWarningLevel
 Write-Host "   => Resource Quota:", $site.ResourceQuota, "- Resource used:", $site.ResourceUsageCurrent
  $SuborRootSite = "RootSite"
 $data += @(
  [pscustomobject]@{
  SiteCollectionURL = $site.Url
  SiteCollectionTitle = $site.Title
  SPType = $site.Template
  SubsiteURL = $site.Url
  SuborRootSite = $SuborRootSite
  WebTemplate = $site.Template
  WebCreationDate = $RootSiteCreatedDate
  LastItemModifiedDate = $site.LastContentModifiedDate
  ExternalSharingCapability = $site.SharingCapability
  StorageQuotaMB = $site.StorageQuota
  StorageUsageCurrentMB = $site.StorageUsageCurrent
  StorageQuotaWarningLevelMB = $site.StorageQuotaWarningLevel
  ResourceQuota = $site.ResourceQuota
  ResourceUsageCurrent = $site.ResourceUsageCurrent
  DevCustomCreated = ""
  DevCustomSPWorkflow = $CheckWorkFlowStatus
  DevSPFxCreated = ""
  DevMSFloworPowerAppsCreated = ""
  DevInforpathForm = $CheckInfoPathStatus
  }
 )
 try
 {
  $AllWebs = Get-SPOWebs -Url $site.Url -Credential $adminCreds
  if($DebugMode) {$AllWebs | %{ Write-Host "   >>", $_.Title, "-", $_.Url}}
  Write-Host "--------------------------------------------------------------------------------------------"
   foreach($mySPWeb in $AllWebs)
  {
   Write-Host "         >> Subsite:", $mySPWeb.Url -ForegroundColor magenta
   $CheckInfoPathStatus = Check-InfoPath-Usage $RootWeb $Rootcontext
   $CheckWorkFlowStatus = Check-SPWorkflow $RootWeb $Rootcontext
   $SuborRootSite = "SubSite"
   $data += @(
    [pscustomobject]@{
    SiteCollectionURL = $site.Url
    SiteCollectionTitle = $site.Title
    SPType = $site.Template
    SubsiteURL = $mySPWeb.Url
    SuborRootSite = $SuborRootSite
    WebTemplate = $mySPWeb.WebTemplate
    WebCreationDate = $mySPWeb.Created
    LastItemModifiedDate = $mySPWeb.LastItemModifiedDate
    ExternalSharingCapability = $site.SharingCapability
    StorageQuotaMB = $site.StorageQuota
    StorageUsageCurrentMB = $site.StorageUsageCurrent
    StorageQuotaWarningLevelMB = $site.StorageQuotaWarningLevel
    ResourceQuota = $site.ResourceQuota
    ResourceUsageCurrent = $site.ResourceUsageCurrent
    DevCustomCreated = ""
    DevCustomSPWorkflow = $CheckWorkFlowStatus
    DevSPFxCreated = ""
    DevMSFloworPowerAppsCreated = ""
    DevInforpathForm = $CheckInfoPathStatus
    }
   )
  }
 }
 catch
 {
  Write-host "  =====>>>> Impossible to get the Subsites " -ForegroundColor Red
  Write-host "  =====>>>> RootSite:", $site.Url -ForegroundColor Yellow
 }
 } 
 #Write-Host $data
 $datestring = (get-date).ToString("yyyyMMdd-hhmm")
$CSVFileToExport = Join-Path -Path $CSVFolderReport  -ChildPath $("SharePoint_"+ $datestring + ".csv")
  Write-host " -----------------------------------------" -ForegroundColor Green
Write-Host (" >>> writing to file {0}" -f $CSVFileToExport) -ForegroundColor Green
$data | Export-csv $CSVFileToExport -NoTypeInformation -enc utf8 
Write-host " -----------------------------------------" -ForegroundColor Green
You can adapt that script as you need, based on your own requirements

admin Changed status to publish August 25, 2023
0