Intercept Sharepoint Document Download Event

Hi all the good people here,
I need to intercept the action of download/view for all the documnets in a Document Library. According to certain security policy, I need to modify the document headers so that, when it is downloaded, the dowcument is protected.
Is there any event in MOSS 2007 or WSS 3.0 to do so?
Also I need to intercept all the means to open/download the documents in that library.
E.g. 1) Document can be downloaded by clicking on the link in the List.
     2) It can be viewed using the Office 2007 Client. etc.
Plese let me know about any event that I can handle.

I’m afraid that you cannot trap the document download event, since there is no such event in List/Library.
You can, however, build your own FieldType to check the credential of a user, and provide download link if he/she suffices.
You can refer to the following article:
Custom Field Type Definition(http://msdn.microsoft.com/en-us/library/ms415141.aspx)
Keep It Simple and Stupid.

Similar Messages

  • Download older version of a file from SharePoint Document Library using CSOM and 404 error

    Hi,
    I am trying to download previous versions including Major and Minor versions of documents from SharePoint Online using CSOM. I get 404 error when I try to download the file. I found several posts on various discussion forums where people are getting same
    error but none of those have any solution/answer. Below is one of the threads and sample code I have tried that results in 404 error. If I use the link in browser directly, I am able to download the file. Also I am able to download the current version of file
    using CSOM without any problem, it is only the older versions that give me 404 in CSOM.
    http://qandasys.info/how-to-download-the-historical-file-version-content-using-csom/
    public int GetStreamFromFile(string docid, string lib, string fileurl, ClientContext clientContext, int iuserid, string Version, bool isCurrrent)
    if(!isCurrent)
    List LibraryName = clientContext.Web.Lists.GetByTitle(lib);
    clientContext.Load(LibraryName);
    clientContext.ExecuteQuery();
    CamlQuery camlQuery = new CamlQuery();
    camlQuery.ViewXml = "" + fileurl +
    Microsoft.SharePoint.Client.ListItemCollection collListItem = LibraryName.GetItems(camlQuery);
    clientContext.Load(collListItem, items => items.Include(item => item.Id, item => item["FileLeafRef"], item => item["LinkFilename"],
    item => item["FileRef"], item => item["File_x0020_Size"], item => item["DocIcon"], item => item.File.Versions));
    //clientContext.Load(collListItem);
    clientContext.ExecuteQuery();
    foreach (Microsoft.SharePoint.Client.ListItem oListItem in collListItem)
    //string fileurl1 = (string)oListItem["FileRef"];
    //string filename = (string)oListItem["LinkFilename"];
    foreach (FileVersion version in oListItem.File.Versions)
    if (Version == version.VersionLabel)
    //Added excutequery to get object one more time as per blog
    //http://social.technet.microsoft.com/Forums/de-DE/sharepointdevelopmentprevious/thread/88a05256-8694-4e40-863d-6c77512e079b
    clientContext.ExecuteQuery();
    FileInformation fileInformation = ClientOM.File.OpenBinaryDirect(clientContext,version.Url);
    bytesarr = ReadFully(fileInformation.Stream);
    Darwaish

    Hi,
    According to your description,
    I know you want to get older version of a file from SharePoint Document Library using Client Object Model.
    The following code snippet for your reference:
    public void GetVersions()
    ClientContext clientContext = new ClientContext(“http://SPSite”);
    Web site = clientContext.Web;
    clientContext.Load(site);
    clientContext.ExecuteQuery();
    File file = site.GetFileByServerRelativeUrl(“/Shared Documents/mydocument.doc”);
    clientContext.Load(file);
    clientContext.ExecuteQuery();
    ListItem currentItem = file.ListItemAllFields;
    clientContext.Load(currentItem);
    clientContext.ExecuteQuery();
    FileVersionCollection versions = file.Versions;
    clientContext.Load(versions);
    clientContext.ExecuteQuery();
    if (versions != null)
    foreach(FileVersion _version in versions)
    Console.WriteLine(“Version : {0}”,_version.VersionLabel);
    More information:
    http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.client.file.versions.aspx
    Best Regards,
    Dennis Guo

  • How to restrict document download in SharePoint 2010

    Is it possible to restrict file downlaods from SharePoint document library.
    Manish

    Hi Manish,
    Information Rights Management is the only way to protect the documents and don't allow user save document in his/her system. You need to setup IRM on your network and the enable it in Central Administration.
    Check this MSDN article for more information:
    http://office.microsoft.com/en-us/sharepoint-server-help/apply-information-rights-management-to-a-list-or-library-HA101790603.aspx
    Hope it could help
    Cheers, Hemendra-MCTS "Yesterday is just a memory,Tomorrow we may never see"

  • How to track the sharepoint documents from MS Dynamics end???

    Hi,
    I want to track the SharePoint documents from MS Dynamics CRM end.
    When the document is added or deleted i need to show the message that docuement is added at so and so document library.
    If i use event receivers what else i need to do after that.
    Any suggestions or solution for/on this.
    Thanks,
    Jiteendra SapathiRao.
    Jitendra.S

    Hi,
    To track the added or deleted event of a SharePoint Library, I would suggest you use workflow which can be triggered when there is file added or deleted, then we can send an
    email for notification.
    Send email in a workflow:
    http://www.youtube.com/watch?v=nNxD82KiUhQ
    Best regards
    Patrick Liang
    TechNet Community Support

  • Ssrs sharepoint 2013 error: "A delivery error has occurred ...not a sharepoint document library..."

    Greetings SSRS/SharePoint experts,
    SharePoint 2013 with SSRS - Creating a subscription to a report that is in SharePoint
    I'm trying to create a subscription to publish a report to a sharepoint document library.
    I've configured all the settings and on clicking OK get the following error:
    "A delivery error has occurred. ---> Microsoft.ReportingSerives.Diagnostics.Utilities.DeliveryErrorException: A delivery error has occurred. ---> Microsoft.ReportingServices.Diagnostics.Utilities.InvalidExtensionParameter: One of the extension
    parameters is not valid for the following reason: The delivery path is either not a SharePoint Document Library Folder or does not exist in the Share Point farm."
    SQL Server Developer Edition 2012 SP1
    SharePoint 2013 Standard
    Just wondering if anyone has a solution.
    I've tried changing the proxy settings as per this post
    http://social.technet.microsoft.com/Forums/en-US/19817dc7-6725-40d8-befa-1b94099a71bd/sql-server-2012-reporting-services-in-sharepoint-2013-integrated-mode-dilivery-extension
    Workaround is to not use a sharepoint document library but write the report to a windows file share (this works but is not optimal).
    Hoping someone at Microsoft or an expert will come back with something.
    Kind regards
    Gio

    Hi,
    Can you check the SharePoint ULS log located at : C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\LOGS, and look at the log there when the error occurs?
    You can also check the Application Event Log on the SQL Server to see if there are any additional errors.
    Tracy Cai
    TechNet Community Support

  • SPMenu Field for sharepoint document library

    I have written code where it will show the Sharepoint document library in sp grid view.It
    is showing the grid but i want the default spmenu field for the type icon. please see the attached image. Below is the code of mine
    private void CreateBoundField(string sDataField, string sHeaderText, bool bReadOnly, SPGridView theGridView)
    BoundField field = new BoundField();
    field.DataField = sDataField;
    field.HeaderText = sHeaderText;
    field.HtmlEncode = false;
    field.HeaderStyle.ForeColor = ColorTranslator.FromHtml("#808080");
    field.HeaderStyle.Font.Names = new string[] { "verdana", "arial", "helvetica", "sans-serif" };
    field.ItemStyle.HorizontalAlign = System.Web.UI.WebControls.HorizontalAlign.Center;
    if (sHeaderText.ToLower().Equals("type"))
    field.ItemStyle.HorizontalAlign = System.Web.UI.WebControls.HorizontalAlign.Center;
    field.ItemStyle.Width = Unit.Pixel(35);
    field.HeaderStyle.Width = Unit.Pixel(35);
    field.ReadOnly = bReadOnly;
    if (!bReadOnly)
    field.SortExpression = sDataField;
    field.Visible = true;
    theGridView.Columns.Add(field);
    SPGridView gv = new SPGridView();
    gv.ID = "gv";
    gv.EmptyDataText = "No items found!";
    gv.AllowSorting = true;
    gv.AllowFiltering = true;
    gv.AutoGenerateColumns = false;
    gv.EnableSortingAndPagingCallbacks = true;
    CreateBoundField("Type", "Type", false, gv);
    CreateBoundField("Title", "Title", false, gv);
    CreateBoundField("Date", "Date", false, gv);
    CreateBoundField("ProcessTask", "ProcessTask", false, gv);
    DataTable dt = new DataTable();
    SPWeb web = SPContext.Current.Web;
    SPListItemCollection items = web.Lists["Shared Documents"].Items;
    dt.Columns.Add("Type");
    dt.Columns.Add("Title");
    dt.Columns.Add("Date");
    dt.Columns.Add("ProcessTask");
    foreach (SPListItem item in items)
    DataRow dr = dt.NewRow();
    string value = item["ProcessTask"].ToString();
    value = value.Substring(value.LastIndexOf(";#") + 2);
    string docicon = SPUtility.ConcatUrls("/_layouts/images",
    SPUtility.MapToIcon(item.Web, SPUtility.ConcatUrls(item.Web.Url, item.Url), "", IconSize.Size16));
    dr["Type"] = string.Format("<img src='{0}' />", docicon);
    dr["Title"] = item.Title;
    dr["Date"] = item["Created"].ToString().Split(' ')[0];
    dr["ProcessTask"] = value;
    dt.Rows.Add(dr);
    gv.DataSource = dt;
    gv.DataBind();
    this.Controls.Add(gv);
    SPListItemCollection _GridCollection = SPContext.Current.Web.Lists["Shared Documents"].Items;
    DataTable _MyDatabale = _GridCollection.GetDataTable();
    gvdetails.DataSource = _MyDatabale;
    gvdetails.DataBind();
    I want the default menu pop up like the below attached image. Can any one help me to
    modify the above code and get me the attached out put.
    Thanks,
    Sandy.

    Hi,
    According to your post, my understanding is that you wanted to show the SharePoint document library in GridView.
    You need to get hold of the SPFile object, which is a property of a ListItem item, and get the ServerRelativeUrl property. Then you need to add code to an <a> tag .
    Here is a similar thread for your reference:
    http://sharepoint.stackexchange.com/questions/88139/code-download-file-from-doc-icon-image-in-sharepoint-2010
    More information:
    Bind SharePoint 2010 Document Library to GridView:
    http://sppractices.blogspot.com/2013/03/bind-sharepoint-2010-document-library.html
    Best Regards,
    Linda Li
    Linda Li
    TechNet Community Support

  • Insert SharePoint document version in Word documents - Viewing in Word Web App

    Hello all,
    I'm using Labels with the label format {Version} to display the SharePoint document version in MS Office documents stored on my company´s SharePoint site. This works fine if I open the document from the Word client application but if I open it from Word Web
    App it displays the previous version number (a minor one). After half an hour or so, when I open the document in Word Web App, the version number is the correct one. I tought it was related with the IE cache so I cleaned it but the results were the same.
    Is there any way around this?
    Thanks a lot.

    Hi,
    By design. Versioning is a property of a SharePoint item. When displaying an item from SharePoint, Office Web Apps only checks if there has been any change to the file content. It does not check for changes in metadata (if the Properties of the file have
    been modified). It then displays the cached image of the last modified version of the file instead of running a new file conversion. This is why the last minor version is displayed in the Content Control instead of the major version. This behaviour is completely
    intended and designed to work this way. This is, in fact, a performance optimization. If we would not have this performance optimization in place, then this would mean that Office Web Apps would need to download the file again every time there is a metadata
    change (which would, of course, mean overloading the SharePoint server).
    I found a similar thread as below, please refer to it for workaround:
    https://social.msdn.microsoft.com/Forums/sharepoint/en-US/75c09197-934b-42ff-8de6-c321267dfd68/document-property-not-updated-when-viewing-a-word-document-in-office-web-apps
    Regards,
    Rebecca Tu
    TechNet Community Support

  • REST API for download event

    Is there a way to get events using REST API when ever a file is downloaded.

    Hi,
    Seems that there is no such method in REST API can monitor the download event of file at this moment:
    http://msdn.microsoft.com/en-us/library/office/dn450841(v=office.15).aspx
    I would suggest you send a feedback to Office Developer Platform if there any expectation about SharePoint APIs or capabilities:
    Customer Feedback for the Office Developer Platform
    http://officespdev.uservoice.com/
    Best regards,
    Patrick
    Patrick Liang
    TechNet Community Support

  • Run macros on all word documents inside sharepoint document library

    Hi,
    i want to run macros on all word documents which resides inside sharepoint document library.
    please help me.

    hi
    macroses are running in opened Word document process memory. In Sharepoint code is running in IIS process, so you probably have to rethink your requirements and see how you may do the same actions not by macroses, but e.g. by event receivers.
    Blog - http://sadomovalex.blogspot.com
    Dynamic CAML queries via C# - http://camlex.codeplex.com

  • Create a new document in Sharepoint Document Library/OneDrive on iPad/Safari

    Hi,
    My users are having trouble creating a new document from OneDrive in Safari on their iPads. The screen goes grey like its going to show the popup to select the new file type, but the popup never comes up. If they clear their cache, it works for exactly 1
    time and then goes back to this behavior. I'm not exactly sure if it worked before and/or when it stopped working. The iPad I have tested was at the latest 8.2 version of IOS and my Sharepoint farm is an On-Prem install of 2013 with SP1 mark2. My WAC farm
    is also 2013 SP1.
    Any suggestions?
    Thanks,
    Matt

    Hi,
    I understand you are suffering the issue when create a document in Sharepoint Document Library/OneDrive on  iPad.
    According to the official article
    https://technet.microsoft.com/en-us/library/fp161353.aspx?f=255&MSPPError=-2147217396, the version of your iOS should be in the supported list. I guess the issue may start after you installed an update, and if there is any other version (low versions)
    of iPads in your company, please use a different version device to test the issue.
    Meanwhile, to determine whether the issue is related to your SharePoint environment, I suggest you just to register an Office 365 trail account, and test the issue with SharePoint Online. In case the same issue happens with SharePoint Online, the issue should
    be related to your client device, and my next suggestion is to contact support of your device manufacture.
    Once you need any help from SharePoint end, please don’t hesitate to come back, and we are always happy to support you.
    Best Regards,
    Lisa Chen
    TechNet Community Support
    Please remember to mark the replies as answers if they help, and unmark the answers if they provide no help. If you have feedback for TechNet Support, contact
    [email protected]

  • How to show sharepoint documents in salesforce ?

    How to show sharepoint documents in salesforce ?
    I should also be able to upload documents from salesforce directly to sharepoint document library/list if the users attach a document for a record in salesforce.   Any idea how to achieve this?
    What are the things need to be done if my sharepoint is available in intranet Or if it is SharePoint Online , how can we link this to salesforce (as Salesforce is global and can be accessed from anywhere). What are the security measures that I need to look
    at and how to achieve this? 
    Ex:- I have a record in salesforce account object. I have to attach a document for that record which should be directly uploaded to sharepoint and shouldn't exist in salesforce, but it should display the listview to the users once its uploaded to sharepoint
    and they should see them as if they exist inside salesforce, once they click on the link in the listview of the relatedlist, it should open the document from sharepoint.
    Thanks in advance.

    Hi,
    According to your post, my understanding is that you want to show SharePoint documents in salesforce.
    You need to integrate SharePoint with Salesforce.
    Nick Swan
    has written an article on how to integrate Salesforce and SharePoint 2007 through the Business Data Catalog.
    But it might be useful as the theory is the same for using SharePoint 2010 and the Business Connectivity Services:
    Salesforce and SharePoint
    Outside of that, there are some useful third-party products you can have a look at.
    Cloud Connector: http://www.layer2.de/en/community/FAQs/cloud-connector/Pages/Office-365-Salesforce-Integration-Migration-Replication.aspx
    DocAve Data Replication: http://www.avepoint.com/salesforce-data-replication/?gclid=CNjZ8sGwl6kCFYEc4Qod-xD-uQ
    DataZoom Script: http://www.siafoo.net/snippet/261
    Best Regards,
    Linda Li
    Linda Li
    TechNet Community Support

  • Not able to create sub folder using SharePoint web service in large SharePoint document library (Item count view threshold limit)

    We are trying to create folder & subfolder in a SharePoint document library using SharePoint default(dws) web service. Document library has unique permission as well as item level permission. It was working as expected. Once item count crosses
    view threshold limit ( 5000) , create folder web method completes with an error and it creates a folder in SharePoint.
    Request:
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:dws="http://schemas.microsoft.com/sharepoint/soap/dws/">
       <soapenv:Header/>
       <soapenv:Body>
          <dws:CreateFolder>
             <!--Optional:-->
             <dws:url>Shared Documents/VenTest02092015v1</dws:url>
          </dws:CreateFolder>
       </soapenv:Body>
    </soapenv:Envelope>
     Response:
    <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
       <soap:Body>
          <CreateFolderResponse xmlns="http://schemas.microsoft.com/sharepoint/soap/dws/">
             <CreateFolderResult>&lt;Error ID="2">Failed&lt;/Error></CreateFolderResult>
          </CreateFolderResponse>
       </soap:Body>
    </soap:Envelope>
     While trying to create subfolder under the above created folder service throws an exception saying
    FolderNotFound.
    Though we are able to create subfolder from SharePoint UI successfully. 
    Request
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:dws="http://schemas.microsoft.com/sharepoint/soap/dws/">
       <soapenv:Header/>
       <soapenv:Body>
          <dws:CreateFolder>
             <!--Optional:-->
             <dws:url>Shared Documents/VenTest02092015v1/REQ-1</dws:url>
          </dws:CreateFolder>
       </soapenv:Body>
    </soapenv:Envelope>
    Response:
    <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
       <soap:Body>
          <CreateFolderResponse xmlns="http://schemas.microsoft.com/sharepoint/soap/dws/">
             <CreateFolderResult>&lt;Error ID="10">FolderNotFound&lt;/Error></CreateFolderResult>
          </CreateFolderResponse>
       </soap:Body>
    </soap:Envelope>

    Yes, you're probably hitting the 5000 list item threshold (
    http://sharepoint.stackexchange.com/questions/105937/overcoming-5000-file-document-library-limits ). I assume you can do it via the UI because you're probably logged in as an admin in which case, out of memory, the threshold is 20.000 items. You can extend
    this limit, but you probably shouldn't.
    Kind regards,
    Margriet Bruggeman
    Lois & Clark IT Services
    web site: http://www.loisandclark.eu
    blog: http://www.sharepointdragons.com

  • BSP extension "download" - event handling problem

    Folks,
    First of all, I apologize if the answer is already out there, but I spent quite some time to find the solution for my problem but finally gave up:
    I implemented the Download extension from Brian's and Tom's book. Since I am using an MVC based app, I put the event handling in the DO_HANDLE_EVENT of a controller instead of the OnInputProcessing event of a page. Here's how my app is designed:
    I have a main controller that has an execute button to trigger a data selection based on some selection criteria. The result of this selection is displayed by means of a subcontroller with tableviews that are wrapped into my “zdownload” extension. Everything works fine: I make my selections, execute the app through the button of the main controller and get my result shown in the tableviews. I push the download icon, select my file format (XLS, HTML etc), get the dialog to choose whether to download or to display the file, perfect!
    But now – after I processed the download successfully - if I click the execute button in the main controller again, I still get the download dialog. It looks like the created event for the download does not get cleared. As I mentioned, I searched through SDN, but all I found were referrals to the call of DISPATCH_INPUT( ) in DO_REQUEST of the main controller, but unfortunately this one is already implemented.
    Any ideas?
    Thanks,
    Guenther

    There is an attribute of the download extension called display_url. You pass a value to the extension telling it what cached URL contains the binary content for your download.  if this display_url attribute has a value assigned to it, then the element will render an iFrame to call the URl.  However if the display_url attribute is empty, it won't render the iFrame.  I suspect that you have a stateful application and after your download event you aren't clearing whatever field that you pass into the display_url attribute.

  • Advice needed for provider hosted web application - authentication and access to SharePoint document library

    I haven't done SharePoint 2013 development with claims so I apologize in advance if my assumptions and questions are way out in left field.
    I'm trying to understand SharePoint 2013 claims authentication for a scenario that involves:
    A SharePoint provided hosted (web forms) app that will pull information and assets (e.g. PDFs) from SharePoint into the web page.
    It will be a VS 2012 solution with asp.net.identity feature.
    Security will be set for internal users, federated external users and forms-based external users.  Based on their security and (claim type) role it will define what information and assets that can be retrieved from SharePoint
    I have looked through MSDN and other sources to understand.
    This one helped with my understanding 
    Federated Identity for Web Applications and assumed that the general concept could be applied to forms-based identity for non-Federated external users .
    What I have now:
    VS 2012 solution web forms application set to Provider Host with asp.net.identity feature and its required membership tables.
    I can create new users and associate claims to the new user.
    I can log in with a user from the membership tables and it will take me to a default.aspx page.  I have added code to it that displays the claims associated to a user.
    For POC purposes I'd like to retrieve documents that are associated to this user from the default.aspx page.
    This is where I am having trouble understanding:  Is my understand correct?
    Internal users
    since they are internal on the network i am assuming that they would already have access to SharePoint and they would already be configured to what documents that they have available to them.
    Federated external users & Forms authentication external users
    it seems to me that the authentication for external users are separate from SharePoint authentication process.
    changes to the configuration settings are necessary in SharePoint, IIS, web application.
    I believe this is what i read.
    claims processes (e.g. mappings) need to be set up in SharePoint
    as long as external users are authenticated then things are ok b/c they would have claims associated to the user and the configuration in SharePoint takes are of the rest.
    This statement bothers me because I think it's wrong.
    So basically i'm stuck with if my understanding is correct: once a user is authenticated either by federated identity or asp.net.identity authentication that it should go to the provider hosted default.aspx page because the claim is authenticated and means
    that it should have access to it and the SharePoint document library based on some claim property.  I could then write the calls to retrieve from a document library and SharePoint will know based on some claim property that the logged in user can only
    access certain documents.
    It just sounds too good to be true and that i'm missing something in the thought process.
    Thanks in advance for taking the time to read.
    greenwasabi

    Hi GreenWasabi,
    i agree this is an interesting topic to discuss,
    as you can check from the article, you may check this example from the codeplex:http://claimsid.codeplex.com/
    when i thinking regarding this topic, its looks like an environment with multiple of realms,
    from what you understand, its correct that all the authentication is based from the provider, so for example i have a windows live ID and internal ID, then when i login windows live ID, it will be authenticated using windows live ID server.
    here is the example for the webservice:
    http://claimsid.codeplex.com/wikipage?title=Federated%20Identity%20for%20Web%20Services&referringTitle=Home
    as i know, if you using this federated, i am not quite sure that you will need to go to the provider page literally, perhaps you can check this example if we are using azure:
    http://social.technet.microsoft.com/wiki/contents/articles/22309.integrating-windows-live-id-google-and-facebook-accounts-with-sharepoint-2013-white-paper.aspx
    Regards,
    Aries
    Microsoft Online Community Support
    Please remember to click “Mark as Answer” on the post that helps you, and to click “Unmark as Answer” if a marked post does not actually answer your question. This can be beneficial to other community members reading the thread.

  • Save output of powershell script to a SharePoint document library?

    Hi
    I've got the PS script below which scripts out our SQL replication so disaster recovery.  Is there a way to output this to a SharePoint document library so that way we can version control the file to keep multiple copies and it also avoids outputting
    this to a file share.  We would still need to have the files with the .sql extension format which is an allowed file type in our farm.
    Thanks
    #Load command-line parameters - if they exist
    param ([string]$sqlserver, [string]$filename)
    #Reference RMO Assembly
    [reflection.assembly]::LoadWithPartialName("Microsoft.SqlServer.Replication") | out-null
    [reflection.assembly]::LoadWithPartialName("Microsoft.SqlServer.Rmo") | out-null
    function errorhandler([string]$errormsg)
        writetofile ("-- Replication Script Generator run at: " + (date)) $filename 1
        writetofile ("-- [Replication Script ERROR] " + $errormsg) $filename 0
    function writetofile([string]$text, [string]$myfilename, [int]$cr_prefix)
        if ($cr_prefix -eq 1) { "" >> $myfilename }
        $text >> $myfilename
    function initializefile([string]$myfilename)
        "" > $myfilename
    trap {errorhandler($_); Break}
    #Deal with absent parameters
    [string] $hostname=hostname
    if ($sqlserver -eq "") {$sqlserver = read-host -prompt "Please enter the server name or leave blank for Hostname"}
    #if ($filename -eq "")  {$filename = read-host -prompt "Please enter the file name (eg 'c:\ReplicationBackupScript.sql')..."}
    if ($sqlserver -eq "")   {$sqlserver = $hostname}
    if ($filename -eq "")   {$filename = "d:\Rep\CreateReplication-$(get-date -format ddMMyyyy).sql"}
    # Clear file contents
    if (Test-Path  ($filename)) {Clear-Content $filename}
    $repsvr=New-Object "Microsoft.SqlServer.Replication.ReplicationServer" $sqlserver
    initializefile $filename
    # if we don't have any replicated databases then there's no point in carrying on
    if ($repsvr.ReplicationDatabases.Count -eq 0)
        writetofile ("-- Replication Script Generator run at: " + (date)) $filename 0
        writetofile "-- ZERO replicated databases on $sqlserver!!!" $filename 1
        EXIT
    # similarly, if we don't have any publications then there's no point in carrying on
    [int] $Count_Tran_Pub = 0
    [int] $Count_Merge_Pub = 0
    foreach($replicateddatabase in $repsvr.ReplicationDatabases)
            $Count_Tran_Pub = $Count_Tran_Pub + $replicateddatabase.TransPublications.Count
            $Count_Merge_Pub = $Count_Merge_Pub + $replicateddatabase.MergePublications.Count
    if (($Count_Tran_Pub + $Count_Merge_Pub) -eq 0)
        writetofile ("-- Replication Script Generator run at: " + (date)) $filename 0
        writetofile "-- ZERO Publications on $sqlserver!!!" $filename 1
        EXIT
    # if we got this far we know that there are some publications so we'll script them out
    # the $scriptargs controls exactly what the script contains
    # for a full list of the $scriptargs see the end of this script
    $scriptargs = [Microsoft.SqlServer.Replication.scriptoptions]::Creation `
    -bor  [Microsoft.SqlServer.Replication.scriptoptions]::IncludeEnableReplicationDB `
    -bor  [Microsoft.SqlServer.Replication.scriptoptions]::IncludeCreateLogreaderAgent `
    -bor  [Microsoft.SqlServer.Replication.scriptoptions]::IncludePublicationAccesses `
    -bor  [Microsoft.SqlServer.Replication.scriptoptions]::IncludeArticles `
    -bor  [Microsoft.SqlServer.Replication.scriptoptions]::IncludePublisherSideSubscriptions `
    -bor  [Microsoft.SqlServer.Replication.scriptoptions]::IncludeSubscriberSideSubscriptions
    writetofile ("-- Replication Script Generator run at: " + (date)) $filename 0
    writetofile "-- PUBLICATIONS ON $sqlserver" $filename 1
    writetofile "-- TRANSACTIONAL PUBLICATIONS ($Count_Tran_Pub)" $filename 1
    foreach($replicateddatabase in $repsvr.ReplicationDatabases)
        if ($replicateddatabase.TransPublications.Count -gt 0)
            foreach($tranpub in $replicateddatabase.TransPublications)
                writetofile "/********************************************************************************" $filename 0
                writetofile ("***** Writing to file script for publication: " + $tranpub.Name) $filename 0
                writetofile "********************************************************************************/" $filename 0
                [string] $myscript=$tranpub.script($scriptargs) 
                writetofile $myscript $filename 0
    writetofile "-- MERGE PUBLICATIONS ($Count_Merge_Pub)" $filename 1
    foreach($replicateddatabase in $repsvr.ReplicationDatabases)
        if ($replicateddatabase.MergePublications.Count -gt 0)
            foreach($mergepub in $replicateddatabase.MergePublications)
                writetofile "/********************************************************************************" $filename 0
                writetofile ("***** Writing to file script for publication: " + $mergepub.Name) $filename 0
                writetofile "********************************************************************************/" $filename 0
                [string] $myscript=$mergepub.script($scriptargs) 
                writetofile $myscript $filename 0

    Check out Using PowerShell to upload a scripts output to SharePoint
    Jason Warren
    @jaspnwarren
    jasonwarren.ca
    habaneroconsulting.com/Insights

Maybe you are looking for

  • ITunes Seem to Have Suddenly Stopped Communicating With the CD/DVD Burner

    Hello, I wonder if anybody can help - my itunes application seems to have suddenly stopped communicating with my laptop's cd/dvd burner (Generic Name (E: H - T-S D D A S - 20N ATA Device)). About 2 years ago, I have experienced a similar problem, but

  • Can I find out the model number of my screen without taking it apart?

    Hi! My "17 Macbook Pro creen needs replacing,and I have no interest in spending upwards of $250. I would like to find a suitable replacement online,but I need to know the model number first for purposes of compatibility. I have been told that I would

  • If I unplug my time capsule will I lose data?

    want to hide the time capsule before leaving home for a few days.  Hard to hide it when it's plugged in and running.   If I unplug it, do I lose data, and how difficult is it to start back up?

  • I downloaded Adobe filter but I don't know how to use it

    I requested information about a web blocker and was led to Adobe Filter. I downloaded it but it gave no directions on how to use it for my kids. Where do I learn to use it? I use operating system Windows XP. I downloaded adobefilter.com

  • SQL Developer in the cloud environment

    Hi, I installed SQL developer as an Administrator in the cloud environment and it is working fine. I also have an user and granted Administrator privs to him ,a nd copied the SQL developer exe to his desktop, but when he runs it SQL developer does no