Functions/update-WITSqlrecord.ps1
<#
.Synopsis Updaterar eller lägger till en post skapad av objektet .DESCRIPTION $Object Med de fält som ska kolla om de ändrats $Recordset Det filtrerade recordsetet med posten som ska ändras eller skapas $IDguidfieldname Nyckel guid fält namn $Skipfields Sträng med Fältnamn komma separerade Returnerar Status 'New eller Changed eller Same' och IDguid .EXAMPLE Example of how to use this cmdlet .EXAMPLE Another example of how to use this cmdlet #> class WITsqlrecordstate { [string]$State [string]$Guid } function Update-WITsqlrecord { [CmdletBinding()] [Alias()] Param ( # Param1 help description [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true, Position=0)] $Object, [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true, Position=1)] $Recordset, [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true, Position=2)] $IDguidfieldname, $Skipfields ) Begin { } Process { if ($Recordset.eof -eq $true) { $F_Changed=$true $F_New=$true $Recordset.addnew() $Recordset.Fields.Item($IDguidfieldname).Value=New-WITguid $f_guid=$Recordset.Fields.Item($IDguidfieldname).Value } else { $F_Changed=$false $F_New=$false } $fields=$Object|Get-Member | where membertype -like '*Property' | select -ExpandProperty name foreach($field_name in $fields) { if ("$Skipfields," -notlike "*$field_name,*") { $objectvalue=[string]$Object.$field_name if ($objectvalue -eq $null) {$objectvalue=''} if ($Recordset.Fields.Item($field_name).Value -ne $objectvalue) { if ($F_Changed -eq $false) { $Recordset.editmode() $F_Changed=$true $f_guid=$Recordset.Fields.Item($IDguidfieldname).Value } $Recordset.Fields.Item($field_name).Value=$objectvalue } else { } } } #for fields } #Process End { if ($F_New -eq $true) { $state='New' } elseif ($F_Changed -eq $true) { $state='Changed' } else { $f_guid=$Recordset.Fields.Item($IDguidfieldname).Value $state='Same' } $recordstate=[WITsqlrecordstate]::new() $recordstate.Guid=$f_guid $recordstate.State=$state return $recordstate } } |