Wednesday, May 6, 2015

Batch file to run PowerShell

1
2
3
4
@echo starting
Powershell.exe -executionpolicy remotesigned -File AllResume_Details.ps1
@echo completed
pause

Script will download the document from the document library folder to the root folder of the machine where script has been executed

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
###############################################################
#Script Function : Script will download the resume from the Resume folder to the root folder where script has been executed.
# Otput of the execute is the Resume folder and a log file ,
# log file contains detail of script execution. The log file name prefix with "Output_RMSS_BulkDownload_Log" 
# Log file also gives the list of GUID which is not available in the resume folder. 
# Date :05/Feb/2015
# Created by : Sanjiv kumar 

################################################################


$snapinName = "Microsoft.SharePoint.PowerShell"
if ((Get-PSSnapin | Where-Object {$_.Name -eq $snapinName }) -eq $NULL) {
  write-host "SharePoint SnapIn not loaded. Loading..."
  Add-PSSnapin $snapinName -ErrorAction SilentlyContinue
}
#Change the URL for different environment.
$webUrl = "http://usdttdevbq005:1000/sites/Test/"
$listUrl = "http://usdttdevbq005:1000/sites/Test/Resumes/"



$destination=".\"
$Datetime= Get-Date -Format dd_MM_yyyy_HH.mm.ss 
#Log file name 
$LogFileName=([string]::Concat("Output_RMSS_BulkDownload_Log" , $Datetime ,".txt"))
$ListOfGuidNotFound=""



##############################################################################

     New-Item  .\$LogFileName  -ItemType file 
        "variable initialization completed.."
        Add-Content  .\$LogFileName -Value "--->   variable initialization completed.."

        $web = Get-SPWeb -Identity $webUrl
        $list = $web.GetList($listUrl)
        "Document Library access.."
        Add-Content  .\$LogFileName -Value "--->   Document Library access.."

        $userGUIDCollection=import-Csv .\Input_CA_GUID.csv |  where {$_.key -eq $keyword} |select UserGUID
        "Read the CSV.."
        Add-Content  .\$LogFileName -Value "--->   Read the CSV.."
        
#Function start        
function ProcessFolder 
{
        param($folderUrl)
        $folder = $web.GetFolder($folderUrl)
       If($folder.Files.Count -ne 0)
    {
        foreach ($file in $folder.Files) 
        {
            Try
              { # Start Try
            
                    #Ensure destination directory
                    $destinationfolder = $destination + "/" + $folder.Url 
                   if (!(Test-Path -path $destinationfolder))
                    {
                        $dest = New-Item $destinationfolder -type directory 
                        "Create folder to disk." +$dest
                        Add-Content .\$LogFileName -Value ([string]::Concat("--->   Create folder to disk. : ",$dest))
                    }
                        #Download file
                        $binary = $file.OpenBinary()
                       
                        $stream = New-Object System.IO.FileStream($destinationfolder + "/" + $file.Name), Create
                        $writer = New-Object System.IO.BinaryWriter($stream)
                        
                      
                        "Start File writting to disk ." +$file.Name
                         Add-Content .\$LogFileName -Value ([string]::Concat("--->   Start File writting to disk : ",$file.Name))
                         
                        $writer.write($binary)
                        $writer.Close()
                        
                        "End File writting to disk ." +$file.Name
                        Add-Content .\$LogFileName -Value ([string]::Concat("--->   End File writting to disk : ",$file.Name))
                        
                       
                      
                        
                 } # End Try
              
            catch 
                {

                    $ErrorMessage = $_.Exception.Message
                    Add-Content .\$LogFileName -Value ([string]::Concat("************************************"))
                    Add-Content .\$LogFileName -Value ([string]::Concat("**********Error with writing files to folder*******************"))
                    Add-Content .\$LogFileName -Value ([string]::Concat("System Message: ",$ErrorMessage))
                    Add-Content .\$LogFileName -Value ([string]::Concat("************************************"))
                    continue
   
                }  
                      
        } #End of For
        }
       
              
}

#Function end 








#Main start

#Download files in folders
 foreach($VaruserGUID in $userGUIDCollection)
 {
        "working for CSV GUID : " + $VaruserGUID.UserGUID.Trim().ToString()
         Add-Content .\$LogFileName -Value ([string]::Concat("`r`n--->   working for CSV GUID :  ",$VaruserGUID.UserGUID.Trim().ToString()))
    
    $varTemp = 0
    
    foreach ($folder in $list.Folders) 
    {# Start of For

            If($VaruserGUID.UserGUID.Trim().ToString() -eq $folder.DisplayName.Trim().ToString())
        {
           "GUID Matches : " + $VaruserGUID.UserGUID.Trim().ToString()
            Add-Content .\$LogFileName -Value ([string]::Concat("--->   GUID Matches with Resume folder name :  ",$folder.DisplayName.Trim().ToString()))
      ###############################################

            ProcessFolder($folder.Url)
             $varTemp = 1
         
           
        }
          
    }#End of For
      
            If($varTemp -eq 0)  # Checking that the GUID is found in Resume folder, Yes or No
        {
                        
            $ListOfGuidNotFound = $ListOfGuidNotFound.Trim().ToString() +"`r`n"+ $VaruserGUID.UserGUID.Trim().ToString()
        }    

}
 Add-Content .\$LogFileName -Value ([string]::Concat("`r`n*******START*** GUID Not Matches with Resume folder for GUID Start***********`r`n"+ $ListOfGuidNotFound +"*******END*** GUID Not Matches with Resume folder for GUID END***********`r`n"))

Fetch all non missing DOCID from the document library

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
############################################################################################################################################
# Script: Fetch all non missing DOCID from the resume repository

############################################################################################################################################

If ((Get-PSSnapIn -Name Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue) -eq $null )
{ Add-PSSnapIn -Name Microsoft.SharePoint.PowerShell }

$host.Runspace.ThreadOptions = "ReuseThread"

#Definition of the function that allows to do the CAML query
function DoCAMLQuery
{
    param ($sSiteCollection,$sListName)
    try
    {
        $spSite=Get-SPSite -Identity $sSiteCollection
        $spwWeb=$spSite.OpenWeb()        
        $splList = $spwWeb.Lists.TryGetList($sListName)
        if ($splList)
        {
            $spqQuery = New-Object Microsoft.SharePoint.SPQuery
   $spqQuery.ViewAttributes = "Scope = 'Recursive'"
            $spqQuery.Query =  ""
   #$spQuery.ViewAttributes = "Scope = 'Recursive'"
   
            #$spqQuery.ViewFields = "" 
            #$spqQuery.ViewFieldsOnly = $true
            $splListItems = $splList.GetItems($spqQuery)

            $iNumber=1
            foreach ($splListItem in $splListItems)
            {
                  
    Add-Content .\$LogFileName -Value ([string]::Concat( ($splListItem["ows_ID"] -as [string]) +"|"+ $splListItem["PDI GUID"] +"|"+ $splListItem["Document Title"] +"|"+ $splListItem["Created"]+"|"+ $splListItem["_dlc_DocIdUrl"]))
            }
        }    
        $spwWeb.Dispose()
    }
    catch [System.Exception]
    {

               $ErrorVar= $_.Exception.ToString()
                    Add-Content .\$LogFileName_Error -Value ([string]::Concat("************************************"))
                 
                    Add-Content .\$LogFileName_Error -Value ([string]::Concat("System Message: "+ $ErrorVar))
           
                    Add-Content .\$LogFileName_Error -Value ([string]::Concat("************************************"))
                    continue
    }
}
#Start-SPAssignment –Global
#Calling the function
$sSiteCollection="http://sp2010:23934/"

$sListName="Resumes"

$Datetime= Get-Date -Format dd_MM_yyyy_HH.mm.ss
#Log file for Missing DocID
$LogFileName=([string]::Concat("Output_DocID_Missing_Log " , $Datetime ,".csv"))
New-Item  .\$LogFileName  -ItemType file
#Log file for Error
$LogFileName_Error=([string]::Concat("Error_DocID_Missing_Log " , $Datetime ,".txt"))
New-Item  .\$LogFileName_Error  -ItemType file
     
     
Add-Content  .\$LogFileName -Value $webUrl
Add-Content .\$LogFileName -Value ([string]::Concat("ID"+"|"+"GUID_Name" +"|"+ "File_Name" +"|"+ "Created_Date"+"|"+ "DOCID"))
write-host "Started..."
DoCamlQuery -sSiteCollection $sSiteCollection -sListName $sListName
write-host "Finished.."
#Stop-SPAssignment –Global

Remove-PSSnapin Microsoft.SharePoint.PowerShell

HTML

Script:

JS