Search This Blog

Friday, October 20, 2017

SharePoint Server 2019

At Ignite Microsoft announced SharePoint Server 2019. It will arrive in the second half of 2018. Preview version is expected mid 2018. SharePoint will come with Office 2019, Exchange Server 2019 and Skype for Business Server 2019.
SharePoint 2019 focus on 4 pillars:
  • Share and work together
  • Inform and engage
  • Transform business process
  • IT/developer value
What we know so far:
  • SharePoint 2019 will support next gen sync client (for OneDrive files and sites synchronizations).
  • User interface will be modernized
  •  New sharing capabilities
  • Communications sites and team news for on-prem.
  • Transform business processes
  • Deeper integration with Power Apps/Flow
  • InfoPath will be supported in SharePoint 2019
  • Modernized metadata and filtering,
  • Column formatting
  • SharePoint Framework to extending business process
  • Hybrid configuration during configuration process
  • Expanding supporting characters
  • New max path limit 400
  • Upload web files
  • Enhanced security
  • SMTP email server authentication
  • New features in SharePoint Framework (new webparts, extensions)
These features are still in planning stage but next months will shows what will be implemented in final product.
Microsoft announced the TAP program for SharePoint Server 2019. Simply go to the Programs nomination portal. Use the private program code SPT232 (not all requests will be accepted).

PowerShell Pass Multiple Parameter using AddSript(store powershell OutPut In SQL table using Procedure and Table insertion Method)

By Procedure

param(
[string]$a,
[string]$CreatedBY,
[string]$LoginName,
[string]$RecID,
[string]$IsParticularsActionFlagvar
)
foreach ($i in $a
{
    #write  "User CN Parameter: $i" >>C:\NGOForm\NGOlogfile.txt
    $OU=$i
    #$OU='CN=NGOuser5,OU=ExitUsersOU,OU=NGO-TEST_OU,DC=NGO,DC=Test,DC=com'
}
foreach ($j in $CreatedBY
{
    #write  "User LoginName Parameter: $j" >>C:\NGOForm\NGOlogfile.txt
    #$VarCreatedBY='Shrawan'
    $VarCreatedBY=$j

}
foreach ($k in $LoginName
{
    #write  "User LoginName Parameter: $j" >>C:\NGOForm\NGOlogfile.txt
    #$UserName='NGO\ngoTest12'
    $UserName=$LoginName

}
foreach ($h in $RecID
{
    #write  "User LoginName Parameter: $j" >>C:\NGOForm\NGOlogfile.txt
    #$VarRecID=4
    $VarRecID=$h
}
foreach ($l in $IsParticularsActionFlagvar
{
    #write  "User LoginName Parameter: $j" >>C:\NGOForm\NGOlogfile.txt
    #$VarIsParticularsActionFlag=4
    $VarIsParticularsActionFlag=$l
}
# Start  Here Define The Passwoed Max Length
$length=Get-Content -Path C:\NGOForm\ResetPasswordMaxLength.txt
# End  Here Define The Passwoed Max Length
$currentDate = Get-Date
if ((Get-PSSnapin "Microsoft.SharePoint.PowerShell" -ErrorAction SilentlyContinue-eq $null) {
       Add-PSSnapin "Microsoft.SharePoint.PowerShell"
}
# End   Call The Fuction Of Rest Password
# Start  Fuction Of Rest Password

Function Set-ADAccountPassNew {
[CmdletBinding()]
param(

[parameter(ValueFromPipeline=$true,Position=0,Mandatory=$True,HelpMessage="Complete OU Path")][ValidateNotNullOrEmpty()] [string[]]$OU ,
[parameter(ValueFromPipeline=$true,Position=1,Mandatory=$True,HelpMessage="UserName")][ValidateNotNullOrEmpty()] [string[]]$UserName ,
[parameter(ValueFromPipeline=$true,Position=2,Mandatory=$True,HelpMessage="Length of Random Password which should be divisible by 3")][ValidateNotNullOrEmpty()] [int]$length ,
[parameter(ValueFromPipeline=$true,Position=3,Mandatory=$True,HelpMessage="Is Particulars Action Flag")][ValidateNotNullOrEmpty()] [int[]]$VarIsParticularsActionFlag ,
[parameter(ValueFromPipeline=$true,Position=4,Mandatory=$True,HelpMessage="Created BY")][ValidateNotNullOrEmpty()] [string[]]$VarCreatedBY ,
[parameter(ValueFromPipeline=$true,Position=5,Mandatory=$True,HelpMessage="Rec ID")][ValidateNotNullOrEmpty()] [int[]]$VarRecID )

process {

Function random-password {
[CmdletBinding()]
param[parameter(Position=0,Mandatory=$True,HelpMessage="Length of Random Password which should be divisible by 3")]
          [ValidateScript({if( ($_ % 3-eq 0 ) {  $TRUE  } else { Throw "Error!! Length of Random Password which should be divisible by 3" }})] [int]$length )
process {
       $len= $length/3
       $part1=-join ( (37..38+ (40..42| Get-Random -Count $len | % {[char]$_})
       $part2=-join ((65..90+ (97..122| Get-Random -Count $len | % {[char]$_})
       $part3=-join ((49..57| Get-Random -Count $len | % {[char]$_})
       $array = "$part1$part2$part3".ToCharArray()
       [array]::sort($array)
       $pass1 = "$array" | Get-Random -Count $length
       $password = $pass1.replace(' ','')
       return $password
}
}
$random=random-password -length $length
$NewPassword = ConvertTo-SecureString -AsPlainText $random -Force

# Start Log File
 write  "User CN Parameter: $OU" >>C:\NGOForm\NGOlogfile.txt
write  "User Employee Name Parameter: $VarCreatedBY" >>C:\NGOForm\NGOlogfile.txt
write  "User Windows Login Name : $UserName" >>C:\NGOForm\NGOlogfile.txt
write  "User Parent Rec ID Parameter: $VarRecID" >>C:\NGOForm\NGOlogfile.txt
write  "User Is Particulars Action Flag Parameter: $VarIsParticularsActionFlag">>C:\NGOForm\NGOlogfile.txt
write  "Length Of Password: $length" >>C:\NGOForm\NGOlogfile.txt
write  "Reset Password : $random" >>C:\NGOForm\NGOlogfile.txt
# End  Log File

$DBServer = Get-Content -Path C:\NGOForm\DBServer.txt
$DBName = Get-Content -Path C:\NGOForm\DBName.txt
$Password = Get-Content -Path C:\NGOForm\DBPassword.txt
$UserID =Get-Content -Path C:\NGOForm\DBUserID.txt
$sqlConnection = New-Object System.Data.SqlClient.SqlConnection
$sqlConnection.ConnectionString = "Server=$DBServer;Database=$DBName;User ID=$UserID;Password=$Password; Integrated Security=True;"
$sqlConnection.Open()

if ($sqlConnection.State -ne [Data.ConnectionState]::Open) {
    Write-Error "SQL Connection Failed! Connection to DB is not open."
    Exit
}
if ($sqlConnection.State -eq [Data.ConnectionState]::Open) {
    Write-Output "SQL Connection successful! Connection to DB is open"
}
# Quit if the SQL connection didn't open properly.

$User = Get-Content -Path C:\NGOForm\AdminUserName.txt
$Pass = Get-Content -Path C:\NGOForm\AdminPassword.txt
$PWord = ConvertTo-SecureString -String "$Pass" -AsPlainText -Force
$mycred = New-Object -TypeName "System.Management.Automation.PSCredential" -ArgumentList $User,$PWord
$error.clear()
Set-ADAccountPassword "$OU" -Server NGO.Test.com -Reset -Credential $mycred -NewPassword$NewPassword -ErrorVariable PRError
if($?)
{
   
   $PStatus = Write-Output "Success! Password reset successfully"
   $sqlCommand = New-Object System.Data.SqlClient.SqlCommand
   $sqlCommand.Connection = $sqlConnection
   $sqlCommand.CommandText = "[uspPowershellExecutionHistory] @NGORecID = '$VarRecID', @WindowsLoginID = '$UserName', @OUName = '$OU', @PowerShellExcutionMessage = 'Success! Password reset successful', @ResetPassword = '$random', @CreatedBy = '$VarCreatedBY', @IsParticularsActionFlag ='$VarIsParticularsActionFlag';"
   $sqlCommand.ExecuteNonQuery()
   # close connection
   $sqlConnection.Close()

   write  "****************************Success! Password reset successfully On : $currentDate  ******************************" >>C:\NGOForm\NGOlogfile.txt


   }
else
{
   Write-Output "Failed! Password reset failed"
   $errorval = $error.exception
   $errorval
   $sqlCommand = New-Object System.Data.SqlClient.SqlCommand
   $sqlCommand.Connection = $sqlConnection
   $sqlCommand.CommandText = "[uspPowershellExecutionHistory] @NGORecID = '$VarRecID', @WindowsLoginID = '$UserName', @OUName = '$OU', @PowerShellExcutionMessage = 'Failed! Password reset failed', @ResetPassword = '$random', @CreatedBy = '$VarCreatedBY', @IsParticularsActionFlag ='$VarIsParticularsActionFlag';"

   $sqlCommand.ExecuteNonQuery()
   # close connection
   $sqlConnection.Close()
   write  "****************************Failed! Password reset failed On : $currentDate  ******************************" >>C:\NGOForm\NGOlogfile.txt
}

#$sqlConnection.Close()
}
}
# End   Fuction Of Rest Password
# Start  Call The Fuction Of Rest Password 
Set-ADAccountPassNew -OU "$OU" -UserName "$UserName" -length "$length" -VarIsParticularsActionFlag "$VarIsParticularsActionFlag" -VarCreatedBY "$VarCreatedBY" -VarRecID "$VarRecID"


By Table

param(
[string]$a,
[string]$CreatedBY,
[string]$LoginName,
[string]$RecID,
[string]$IsParticularsActionFlagvar
)
foreach ($i in $a
{
    #write  "User CN Parameter: $i" >>c:\NGOlogfile.txt
    $VarCN=$i
}
foreach ($j in $CreatedBY
{
    #write  "User LoginName Parameter: $j" >>c:\NGOlogfile.txt
    $VarCreatedBY=$j
   
}

foreach ($k in $LoginName
{
    #write  "User LoginName Parameter: $j" >>c:\NGOlogfile.txt
    $varLoginName=$k
   
}

foreach ($h in $RecID
{
    #write  "User LoginName Parameter: $j" >>c:\NGOlogfile.txt
    $VarRecID=$h
   
}

foreach ($l in $IsParticularsActionFlagvar
{
    #write  "User LoginName Parameter: $j" >>c:\NGOlogfile.txt
    $VarIsParticularsActionFlag=$l
   
}

if ((Get-PSSnapin "Microsoft.SharePoint.PowerShell" -ErrorAction SilentlyContinue-eq $null) {
       Add-PSSnapin "Microsoft.SharePoint.PowerShell"
}

#$randomObj = New-Object System.Random
#$NewPassword=""
#1..12 | ForEach { $NewPassword = $NewPassword + [char]$randomObj.next(33,126) }
#$NewPassword



# Open SQL connection (you have to change these variables)
$DBServer = "111.22.33.54"
$DBName = "DB_NGO"
$Password = "NGO"
$UserID = "NGO"
$sqlConnection = New-Object System.Data.SqlClient.SqlConnection
$sqlConnection.ConnectionString = "Server=$DBServer;Database=$DBName;User ID=$UserID;Password=$Password; Integrated Security=True;"
$sqlConnection.Open()
# Quit if the SQL connection didn't open properly.
if ($sqlConnection.State -eq [Data.ConnectionState]::Close) {
                $sqlConnection.Open()
            }


#if ($sqlConnection.State -ne [Data.ConnectionState]::Open) {
    #"Connection to DB is not open."
   # Exit
#}

#write  "Error: pa" >>c:\logfile.txt
$username = 'NGO\admin'
$Password = 'ngo' | ConvertTo-SecureString -Force -AsPlainText
$credential = New-Object System.Management.Automation.PsCredential($username, $Password)

Function random-password {
[CmdletBinding()]
param[parameter(Position=0,Mandatory=$True,HelpMessage="Length of Random Password which should be divisible by 3")]
          [ValidateScript({if( ($_ % 3-eq 0 ) {  $TRUE  } else { Throw "Error!! Length of Random Password which should be divisible by 3" }})] [int]$length )
process {
       $len= $length/3
       $part1=-join ( (37..38+ (40..42| Get-Random -Count $len | % {[char]$_})
       $part2=-join ((65..90+ (97..122| Get-Random -Count $len | % {[char]$_})
       $part3=-join ((49..57| Get-Random -Count $len | % {[char]$_})
       $array = "$part1$part2$part3".ToCharArray()
       [array]::sort($array)
       $pass1 = "$array" | Get-Random -Count $length
       $password = $pass1.replace(' ','')
       return $password
}
}
$random=random-password -length $length
$NewPassword = ConvertTo-SecureString -AsPlainText $random -Force
write  "User NewPassword  Pass Parameter: $NewPassword" >>c:\NGOlogfile.txt
try
{
   $job = Start-Job -scriptblock {
         
          #Set-ADAccountPassword $args[0] -Server "NGO.Test.com" -Reset -NewPassword (ConvertTo-SecureString -AsPlainText $NewPassword -Force)
          #Set-ADAccountPassword  $args[0] -Server "NGO.Test.com" -Reset -NewPassword (ConvertTo-SecureString -AsPlainText "vinay@3708" -Force)
          Set-ADAccountPassword 'CN=Exit User1,OU=ExitUsersOU,OU=NGO-TEST_OU,DC=NGO,DC=Test,DC=com' -Server "NGO.Test.com" -Reset -NewPassword(ConvertTo-SecureString -AsPlainText "vinay@8852" -Force)
         }-ArgumentList $a -credential $credential
         Receive-Job $job
         Wait-Job $job
           
            if($?)
            {
            write  "User CN Parameter: $VarCN" >>c:\NGOlogfile.txt
            write  "User Employee Name Parameter: $VarCreatedBY" >>c:\NGOlogfile.txt
            write  "User Windows Login Name : $varLoginName" >>c:\NGOlogfile.txt
            write  "User Parent Rec ID Parameter: $VarRecID" >>c:\NGOlogfile.txt
            write  "User Is Particulars Action Flag Parameter: $VarIsParticularsActionFlag">>c:\NGOlogfile.txt
          
            $currentDate = Get-Date
            $sqlCommand = New-Object System.Data.SqlClient.SqlCommand
            $sqlCommand.Connection = $sqlConnection
            # This SQL query will insert 1 row based on the parameters, and then will return the ID
            # field of the row that was inserted.""
            #$sqlCommand.CommandText ="INSERT INTO dbo.tblPowershellExecutionHistory (NGORecID,WindowsLoginID,CN,PowerShellExcutionMessage,ResetPassword,CreatedBy,CreatedDate,IsParticularsActionFlag) VALUES ('$VarRecID','$varLoginName','$VarCN','Password reset successfully: $job','$pass','$VarCreatedBY','$currentDate','$VarIsParticularsActionFlag'); "
            $sqlCommand.CommandText ="INSERT INTO dbo.tblPowershellExecutionHistory (NGORecID,WindowsLoginID,CN,PowerShellExcutionMessage,ResetPassword,CreatedBy,CreatedDate,IsParticularsActionFlag,IsActive) VALUES ('$VarRecID','$varLoginName','$VarCN','Password reset successfully','$NewPassword','$VarCreatedBY','$currentDate','$VarIsParticularsActionFlag','YES'); "
            $sqlCommand.ExecuteNonQuery()
            write  "Reset Password Success: Password reset successfully" >>c:\NGOlogfile.txt
               #"Password reset successfully"
            }


            else
            {
             $sqlCommand = New-Object System.Data.SqlClient.SqlCommand
             $sqlCommand.Connection = $sqlConnection
             # This SQL query will insert 1 row based on the parameters, and then will return the ID
             # field of the row that was inserted.""
              $sqlCommand.CommandText ="INSERT INTO dbo.tblPowershellExecutionHistory (NGORecID,WindowsLoginID,CN,PowerShellExcutionMessage,ResetPassword,CreatedBy,CreatedDate) VALUES ('$VarRecID','$varLoginName','$VarCN','Password Reset  failed','$NewPassword','$VarCreatedBY','$currentDate'); "
             $sqlCommand.ExecuteNonQuery()
              write  "Reset Password  Error: Password reset failed" >>c:\NGOlogfile.txt
              #"Password reset failed"
            }
            # close connection
            if ($sqlConnection.State -eq [Data.ConnectionState]::Open) {
                $sqlConnection.Close()
            }

        #Set-ADAccountPassword 'CN=Exit User1,OU=ExitUsersOU,OU=NGO-TEST_OU,DC=NGO,DC=Test,DC=com' -Server "NGO.Test.com" -Reset -NewPassword (ConvertTo-SecureString -AsPlainText "vinay@8822" -Force)
}
catch [Exception]
{
            $sqlCommand = New-Object System.Data.SqlClient.SqlCommand
            $sqlCommand.Connection = $sqlConnection
            # This SQL query will insert 1 row based on the parameters, and then will return the ID
            # field of the row that was inserted.""
            $sqlCommand.CommandText ="INSERT INTO dbo.tblPowershellExecutionHistory (NGORecID,WindowsLoginID,CN,PowerShellExcutionMessage,ResetPassword,CreatedBy,CreatedDate) VALUES ('$VarRecID','$varLoginName','$VarCN','Error in  reset  password:$_.Exception.Message','$NewPassword','$VarCreatedBY','$currentDate'); "
            $sqlCommand.ExecuteNonQuery()
            write  "Error: $_.Exception.Message" >>c:\NGOlogfile.txt
   
}
      



Procedure


ALTER PROCEDURE [dbo].[uspPowershellExecutionHistory]
        @NGORecID                  int,
           @WindowsLoginID             nvarchar(200),
           @OUName                     nvarchar(500),
              @PowerShellExcutionMessage  nvarchar(4000),
              @ResetPassword              nvarchar(100)=null,
              @CreatedBy                  nvarchar(200),
              @IsParticularsActionFlag    int
       AS
BEGIN
INSERT INTO dbo.tblPowershellExecutionHistory
(
                     NGORecID,
                     WindowsLoginID,
                     CN,
                     PowerShellExcutionMessage,
                     ResetPassword,
                     CreatedBy,
                     CreatedDate,
                     IsParticularsActionFlag,
                     IsActive
)
 VALUES (
            @NGORecID,
                     @WindowsLoginID,
                     @OUName,
                     @PowerShellExcutionMessage,
                     @ResetPassword,
                     @CreatedBy,
                     GETDATE(),
                     @IsParticularsActionFlag,
                     'YES'
)

END



C# Code :

  // ps.AddScript(@"C:\temp\DisableUserAccountPSScript.ps1 '" + dynamicReplacementParameterInScript + "'");
                                        ps.AddScript(@"C:\temp\ChangePasswordPSScript.ps1 '" + dynamicReplacementParameterInScript + "' " + " '"+ CreatedBY + "' " + " '"+ LoginName + "' " + " '"+ RecID + "' ");

                                        var results = ps.Invoke();
                                        if (results.Count > 0)
                                        {
                                            ActionHappen = 1;
                                            PowerShellScriptOutPutResult = "Password reset successfully";
                                        }
                                        else
                                        {
                                            ActionHappen = 0;
                                            PowerShellScriptOutPutResult = " Password reset failed";
                                        }