PSSmartsheet.psm1
#Region '.\Public\Authentication\Initialize-SmartsheetClient.ps1' -1 Function Initialize-SmartsheetClient { <# .SYNOPSIS Creates a Smartsheet Client Object that you can use to make API calls and sets it to the default .DESCRIPTION Creates a Smartsheet Client Object that you can use to make API calls and sets it to the default .PARAMETER AccessToken A description of the AccessToken parameter. .PARAMETER AssumedUser The email address of a member of your Org that you want to impersonate. NOTE: You must have Sys Admin privileges to use this. .PARAMETER CustomURI Use this Param if you are interacting with a custom intance of Smartsheet. NOTE: Intended for internal use only .PARAMETER DefaultURI Use this switch if you are interacting with them main Smartsheet app .PARAMETER Gov Use this switch if you are interacting with Smartsheet Gov .EXAMPLE Initialize-SmartsheetClient -AccessToken 'll352u9jujauoqz4gstvsae05' .EXAMPLE Initialize-SmartsheetClient -AccessToken 'll352u9jujauoqz4gstvsae05' -AssumedUser 'john.doe@example.com' .Example Initialize-SmartsheetClient -AccessToken 'll352u9jujauoqz4gstvsae05' -Gov #> [CmdletBinding(DefaultParameterSetName = 'DefaultURI')] [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSReviewUnusedParameter', '', Justification='Param used for ParameterSetName matching')] Param ( [Parameter(Mandatory = $true)] [string] $AccessToken, [string] $AssumedUser, [Parameter(ParameterSetName = 'CustomURI', DontShow = $true)] [ValidatePattern('http(s)?://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?')] [String] $CustomURI, [Parameter(ParameterSetName = 'DefaultURI')] [Switch] $DefaultURI, [Parameter(ParameterSetName = 'GovURI')] [switch] $Gov ) Process { Switch ($PSCmdlet.ParameterSetName) { "DefaultURI" { $client = [Smartsheet.Api.SmartsheetBuilder]::new().SetAccessToken($AccessToken) } "GovURI" { $client = [Smartsheet.Api.SmartsheetBuilder]::new().SetAccessToken($AccessToken).SetBaseURI([Smartsheet.Api.SmartsheetBuilder]::GOV_BASE_URI) } "CustomURI" { $client = [Smartsheet.Api.SmartsheetBuilder]::new().SetAccessToken($AccessToken).SetBaseURI($CustomURI) } } If (![string]::IsNullOrWhiteSpace($AssumedUser)) { [Void]$Client.SetAssumedUser($AssumedUser) } Try { [Void]$client.Build().UserResources.GetCurrentUser() $script:SmartsheetClient = $Client.Build() } Catch { If ($ErrorActionPreference -eq 'Stop') { $PSCmdlet.ThrowTerminatingError($_) } Else { Write-Error $_ } } } } #EndRegion '.\Public\Authentication\Initialize-SmartsheetClient.ps1' 89 #Region '.\Public\Cells\Get-SmartsheetCellHistory.ps1' -1 Function Get-SmartsheetCellHistory { <# .SYNOPSIS Gets the cell modification history. .DESCRIPTION Gets the cell modification history for a specified cell. .PARAMETER SheetID Sheet Id of the sheet being accessed. .PARAMETER RowID Row Id in the sheet being accessed. .PARAMETER ColumnID Column Id in the sheet being accessed. .PARAMETER Includes A comma-separated list of elements to include in the query. .EXAMPLE Get-SmartsheetCellHistory -SheetID '9283173393803140' -RowID '0123456789012345' -ColumnID '4567890123456789,' .NOTES This is a resource-intensive operation and incurs 10 additional requests against the rate limit. #> [CmdletBinding()] Param ( [Parameter(Mandatory = $true)] [ValidateNotNullOrEmpty()] [long] $SheetID, [Parameter(Mandatory = $true)] [ValidateNotNullOrEmpty()] [long] $RowID, [Parameter(Mandatory = $true)] [ValidateNotNullOrEmpty()] [long] $ColumnID, [ValidateNotNullOrEmpty()] [Smartsheet.Api.Models.CellInclusion[]] $Includes = $null ) Begin { If ([String]::IsNullOrEmpty($Script:SmartsheetClient)) { Throw "Smartsheet API Client has not yet been initialized. Please run Initialize-SmartsheetClient and try again." } $PagingParams = [Smartsheet.Api.Models.PaginationParameters]::new($true, $null, $null) } Process { Try { $Script:SmartsheetClient.SheetResources.RowResources.CellResources.GetCellHistory( $SheetID, $RowID, $ColumnID, $Includes, $PagingParams ) } Catch { If ($ErrorActionPreference -eq 'Stop') { $PSCmdlet.ThrowTerminatingError($_) } Else { Write-Error $_ } } } } #EndRegion '.\Public\Cells\Get-SmartsheetCellHistory.ps1' 74 #Region '.\Public\Columns\Add-SmartsheetColumn.ps1' -1 Function Add-SmartsheetColumn { <# .SYNOPSIS Inserts one or more columns into the sheet specified. .DESCRIPTION Inserts one or more columns into the sheet specified. .PARAMETER SheetId The ID of the sheet to add columns to. .PARAMETER Column One or more column objects to add to the specified sheet. .EXAMPLE $column1 = New-SSColumnObject -Title "Column 1" -Primary $column2 = New-SSColumnObject -Title "Second Column" -Type CHECKBOX Add-SmartsheetColumn -SheetId '2252168947361668' -Column $column1,$Column2 .NOTES If multiple columns are specified in the request, the index attribute must be set to the same value for all columns. #> [CmdletBinding()] Param ( [Parameter(Mandatory = $true)] [ValidateNotNullOrEmpty()] [long] $SheetId, [Parameter(Mandatory = $true)] [ValidateNotNullOrEmpty()] [Smartsheet.Api.Models.Column[]] $Column ) Begin { If ([String]::IsNullOrEmpty($Script:SmartsheetClient)) { Throw "Smartsheet API Client has not yet been initialized. Please run Initialize-SmartsheetClient and try again." } } Process { Try { $script:SmartsheetClient.SheetResources.ColumnResources.AddColumns( $SheetId, $Column ) } Catch { If ($ErrorActionPreference -eq 'Stop') { $PSCmdlet.ThrowTerminatingError($_) } Else { Write-Error $_ } } } } #EndRegion '.\Public\Columns\Add-SmartsheetColumn.ps1' 58 #Region '.\Public\Columns\Get-SmartsheetColumn.ps1' -1 Function Get-SmartsheetColumn { <# .SYNOPSIS Gets a specified column or a list of columns on a specified sheet .DESCRIPTION Gets a specified column or a list of columns on a specified sheet .PARAMETER SheetID Sheet Id of the sheet being accessed. .PARAMETER Include Represents specific elements to include in a response. .PARAMETER ColumnID Column Id in the sheet being accessed. .PARAMETER Level Specifies whether new functionality, such as multi-contact data is returned in a backwards-compatible, text format (level=0, default), multi-contact data (level=1), or multi-picklist data (level=2). .EXAMPLE Get-SmartsheetColumn -SheetID '9283173393803140' .EXAMPLE Get-SmartsheetColumn -SheetID '9283173393803140' -ColumnID '7960873114331012' #> [CmdletBinding()] [OutputType([Smartsheet.Api.Models.Column])] Param ( [Parameter(Mandatory = $true)] [ValidateNotNullOrEmpty()] [long] $SheetID, [Smartsheet.Api.Models.ColumnInclusion[]] $Include = $null, [ValidateNotNullOrEmpty()] [long[]] $ColumnID, [ValidateSet('0', '1', '2')] [int] $Level = 0 ) Begin { If ([String]::IsNullOrEmpty($Script:SmartsheetClient)) { Throw "Smartsheet API Client has not yet been initialized. Please run Initialize-SmartsheetClient and try again." } $PagingParams = [Smartsheet.Api.Models.PaginationParameters]::new($true, $null, $null) } Process { Try { If ($ColumnID) { ForEach ($column In $ColumnID) { $Script:SmartsheetClient.SheetResources.ColumnResources.getColumn( $SheetID, $column, $Include ) } } Else { $Script:SmartsheetClient.SheetResources.ColumnResources.ListColumns( $SheetID, $Include, $PagingParams, $level ).data } } Catch { If ($ErrorActionPreference -eq 'Stop') { $PSCmdlet.ThrowTerminatingError($_) } Else { Write-Error $_ } } } } #EndRegion '.\Public\Columns\Get-SmartsheetColumn.ps1' 82 #Region '.\Public\Columns\Remove-SmartsheetColumn.ps1' -1 Function Remove-SmartsheetColumn { <# .SYNOPSIS Deletes a specified column. .DESCRIPTION Deletes a specified column. .PARAMETER SheetId The ID of the sheet to delete columns from .PARAMETER ColumnId The ID of the column(s) to delete from the specified sheet. .PARAMETER Force Forces the rows to be deleted without prompting. .EXAMPLE Remove-SmartsheetColumn -SheetId '9283173393803140' -ColumnId '0123456789012345' -Force #> [CmdletBinding(ConfirmImpact = 'High', SupportsShouldProcess = $true)] Param ( [Parameter(Mandatory = $true)] [ValidateNotNullOrEmpty()] [long] $SheetId, [Parameter(Mandatory = $true, ValueFromPipeline = $true)] [ValidateNotNullOrEmpty()] [long[]] $ColumnId, [switch] $Force ) Begin { If ([String]::IsNullOrEmpty($Script:SmartsheetClient)) { Throw "Smartsheet API Client has not yet been initialized. Please run Initialize-SmartsheetClient and try again." } } Process { Try { ForEach ($ID In $ColumnId) { $Column = Get-SmartsheetColumn -SheetId $SheetId -ColumnId $ID If ($Force -or $pscmdlet.ShouldProcess("The column $($Column.title) will be deleted. This cannot be undone")) { $Script:SmartsheetClient.SheetResources.ColumnResources.DeleteColumn( $SheetId, $Column.Id ) } } } Catch { If ($ErrorActionPreference -eq 'Stop') { $PSCmdlet.ThrowTerminatingError($_) } Else { Write-Error $_ } } } } #EndRegion '.\Public\Columns\Remove-SmartsheetColumn.ps1' 66 #Region '.\Public\Columns\Set-SmartsheetColumn.ps1' -1 Function Set-SmartsheetColumn { <# .SYNOPSIS Updates properties of the column, moves the column, and/or renames the column. .DESCRIPTION Updates properties of the column, moves the column, and/or renames the column. .PARAMETER SheetId The sheet containing the column to update. .PARAMETER Column A column object representing the column to update. Must include an ID for the specified column. .EXAMPLE $column = New-SSColumnObject -Title "Column 1" -Id '5005385858869124' -Index 0 Set-SmartsheetColumn -SheetId '2252168947361668' -Column $column .NOTES You cannot change the type of a Primary column. While dependencies are enabled on a sheet, you can't change the type of any special calendar/Gantt columns. If the column type is changed, all cells in the column are converted to the new column type and column validation is cleared. Type is optional when moving or renaming, but required when changing type or dropdown values. #> [CmdletBinding()] Param ( [Parameter(Mandatory = $true)] [ValidateNotNullOrEmpty()] [long] $SheetId, [Parameter(Mandatory = $true, ValueFromPipeline = $true)] [ValidateNotNullOrEmpty()] [Smartsheet.Api.Models.Column] $Column ) Begin { If ([String]::IsNullOrEmpty($Script:SmartsheetClient)) { Throw "Smartsheet API Client has not yet been initialized. Please run Initialize-SmartsheetClient and try again." } } Process { Try { $script:SmartsheetClient.SheetResources.ColumnResources.UpdateColumn( $SheetId, $Column ) } Catch { If ($ErrorActionPreference -eq 'Stop') { $PSCmdlet.ThrowTerminatingError($_) } Else { Write-Error $_ } } } } #EndRegion '.\Public\Columns\Set-SmartsheetColumn.ps1' 61 #Region '.\Public\Groups\Add-SmartsheetGroup.ps1' -1 Function Add-SmartsheetGroup { <# .SYNOPSIS Creates a new Group .DESCRIPTION Creates a new Group .PARAMETER GroupObject The group object created using New-SSGroupObject .PARAMETER Name Name of the group to create. NOTE: Must be unique accross org .PARAMETER Description A description of the new group to create .PARAMETER MemberEmail Email address(es) of user(s) to initially populate the new group with. .EXAMPLE $Group = New-SSGroupObject -Name 'A new Group' -MemberEmail 'john.doe@example.com','Jane.doe@example.com' Add-SmartsheetGroup -GroupObject $Group .EXAMPLE Add-SmartsheetGroup -Name 'A new Group' -Description 'A description of the group' -MemberEmail 'john.doe@example.com','Jane.doe@example.com' .NOTES This operation is only available to group administrators and system administrators. #> [CmdletBinding(DefaultParameterSetName = 'Params')] Param ( [Parameter(ParameterSetName = 'GroupObject', ValueFromPipeline = $true)] [Alias('InputObject')] [Smartsheet.Api.Models.Group[]] $GroupObject, [Parameter(ParameterSetName = 'Params', Mandatory = $true)] [ValidateNotNullOrEmpty()] [string] $Name, [Parameter(ParameterSetName = 'Params')] [string] $Description = $null, [Parameter(ParameterSetName = 'Params')] [ValidatePattern('^[^@\s]+@[^@\s]+\.[^@\s]+$')] [string[]] $MemberEmail ) Begin { If ([String]::IsNullOrEmpty($Script:SmartsheetClient)) { Throw "Smartsheet API Client has not yet been initialized. Please run Initialize-SmartsheetClient and try again." } } Process { If ($PSCmdlet.ParameterSetName -eq 'Params') { If ($MemberEmail) { $GroupObject = New-SSGroupObject -Name $Name -Description $Description -MemberEmail $MemberEmail } Else { $GroupObject = New-SSGroupObject -Name $Name -Description $Description } } ForEach ($GO In $GroupObject) { Try { $script:SmartsheetClient.GroupResources.CreateGroup($GO) } Catch { If ($ErrorActionPreference -eq 'Stop') { $PSCmdlet.ThrowTerminatingError($_) } Else { Write-Error $_ } } } } } #EndRegion '.\Public\Groups\Add-SmartsheetGroup.ps1' 85 #Region '.\Public\Groups\Add-SmartsheetGroupMember.ps1' -1 Function Add-SmartsheetGroupMember { <# .SYNOPSIS Adds one or more members to a group. .DESCRIPTION Adds one or more members to a group. .PARAMETER Email Email address of new user(s) to add to the specified group .PARAMETER GroupID ID of the group to add members to. .EXAMPLE Add-SmartsheetGroupMembers -Email 'john.doe@example.com','Jane.doe@example.com' -GroupID '7917992160847748' .NOTES This operation is only available to group administrators and system administrators. #> [CmdletBinding()] Param ( [Parameter(Mandatory = $true)] [ValidatePattern('^[^@\s]+@[^@\s]+\.[^@\s]+$')] [string[]] $Email, [Parameter(Mandatory = $true)] [ValidateNotNullOrEmpty()] [long] $GroupID ) Begin { If ([String]::IsNullOrEmpty($Script:SmartsheetClient)) { Throw "Smartsheet API Client has not yet been initialized. Please run Initialize-SmartsheetClient and try again." } } Process { [Smartsheet.Api.Models.GroupMember[]]$groupMembers = $Email.foreach{ [Smartsheet.Api.Models.GroupMember+AddGroupMemberBuilder]::new($_).Build() } Try { $script:SmartsheetClient.GroupResources.AddGroupMembers( $GroupID, $groupMembers ) } Catch { If ($ErrorActionPreference -eq 'Stop') { $PSCmdlet.ThrowTerminatingError($_) } Else { Write-Error $_ } } } } #EndRegion '.\Public\Groups\Add-SmartsheetGroupMember.ps1' 60 #Region '.\Public\Groups\Get-SmartsheetGroup.ps1' -1 Function Get-SmartsheetGroup { <# .SYNOPSIS Retrieves information about a specified group or a list of all groups in the org. .DESCRIPTION Retrieves information about a specified group or a list of all groups in the org. When specifying a specific group, an array of group memebers is also returned. .PARAMETER GroupID The group ID of a specific group .EXAMPLE Get-SmartsheetGroup .EXAMPLE Get-SmartsheetGroup -GroupID '6932724448552836' #> [CmdletBinding()] [OutputType([Smartsheet.Api.Models.Group])] Param ( [Parameter(ValueFromPipeline = $true)] [ValidateNotNullOrEmpty()] [long[]] $GroupID ) Begin { If ([String]::IsNullOrEmpty($Script:SmartsheetClient)) { Throw "Smartsheet API Client has not yet been initialized. Please run Initialize-SmartsheetClient and try again." } $PagingParams = [Smartsheet.Api.Models.PaginationParameters]::new($true, $null, $null) } Process { If ($GroupID) { ForEach ($group In $GroupID) { Try { $script:SmartsheetClient.GroupResources.GetGroup($group) } Catch { If ($ErrorActionPreference -eq 'Stop') { $PSCmdlet.ThrowTerminatingError($_) } Else { Write-Error $_ } } } } Else { Try { $script:SmartsheetClient.GroupResources.ListGroups($PagingParams).Data } Catch { If ($ErrorActionPreference -eq 'Stop') { $PSCmdlet.ThrowTerminatingError($_) } Else { Write-Error $_ } } } } } #EndRegion '.\Public\Groups\Get-SmartsheetGroup.ps1' 67 #Region '.\Public\Groups\Remove-SmartsheetGroup.ps1' -1 Function Remove-SmartsheetGroup { <# .SYNOPSIS Deletes the group specified .DESCRIPTION Deletes the group specified .PARAMETER GroupID The ID of the group to delete .PARAMETER Force Removes group without prompting .EXAMPLE Remove-SmartsheetGroup -GroupID '6932724448552836' -Force .NOTES This operation is only available to group administrators and system administrators. #> [CmdletBinding(ConfirmImpact = 'High', SupportsShouldProcess = $true)] Param ( [Parameter(Mandatory = $true, ValueFromPipeline = $true)] [long[]] $GroupID, [switch] $Force ) Begin { If ([String]::IsNullOrEmpty($Script:SmartsheetClient)) { Throw "Smartsheet API Client has not yet been initialized. Please run Initialize-SmartsheetClient and try again." } } Process { ForEach ($ID In $GroupID) { Try { $GroupObj = Get-SmartsheetGroup -GroupID $ID If ($Force -or $pscmdlet.ShouldProcess("Group $($GroupObj.Name) will be deleted. This cannot be undone")) { $Script:SmartsheetClient.GroupResources.DeleteGroup( $GroupObj.ID) } } Catch { If ($ErrorActionPreference -eq 'Stop') { $PSCmdlet.ThrowTerminatingError($_) } Else { Write-Error $_ } } } } } #EndRegion '.\Public\Groups\Remove-SmartsheetGroup.ps1' 59 #Region '.\Public\Groups\Remove-SmartsheetGroupMember.ps1' -1 Function Remove-SmartsheetGroupMember { <# .SYNOPSIS Removes specified member(s) from a group. .DESCRIPTION Removes specified member(s) from a group. .PARAMETER GroupID Id of the group to remove users from .PARAMETER User The userID or email of the user to be removed from the group .PARAMETER Force Removes user(s) group the specified group without prompting .EXAMPLE Remove-SmartsheetGroupMember -GroupID '7917992160847748' -UserID '1539725208119172' -Force .NOTES This operation is only available to group administrators and system administrators. #> [CmdletBinding(ConfirmImpact = 'Medium', SupportsShouldProcess = $true)] Param ( [Parameter(Mandatory = $true)] [ValidateNotNullOrEmpty()] [long] $GroupID, [Parameter(Mandatory = $true, ValueFromPipeline = $true)] [ValidateNotNullOrEmpty()] [Alias('Email', 'UserID')] [string[]] $User, [switch] $Force ) Begin { If ([String]::IsNullOrEmpty($Script:SmartsheetClient)) { Throw "Smartsheet API Client has not yet been initialized. Please run Initialize-SmartsheetClient and try again." } } Process { $GroupObj = Get-SmartsheetGroup -GroupID $GroupID ForEach ($U In $User) { Try { If ($U -match "^[^@\s]+@[^@\s]+\.[^@\s]+$") { $UserObj = Get-SmartsheetUser -Email $U } Else { $UserObj = (Get-SmartsheetUser -UserID $U) } If ($Force -or $pscmdlet.ShouldProcess("Removing user with email $($UserObj.Email) from $($GroupObj.Name)")) { $script:SmartsheetClient.GroupResources.RemoveGroupMember( $GroupID, $UserObj.ID ) } } Catch { If ($ErrorActionPreference -eq 'Stop') { $PSCmdlet.ThrowTerminatingError($_) } Else { Write-Error $_ } } } } } #EndRegion '.\Public\Groups\Remove-SmartsheetGroupMember.ps1' 76 #Region '.\Public\Groups\Set-SmartsheetGroup.ps1' -1 Function Set-SmartsheetGroup { <# .SYNOPSIS Updates the Group specified .DESCRIPTION Updates the Group Specified. .PARAMETER GroupObject The group object created using New-SSGroupObject .PARAMETER GroupID The ID of the group to update .PARAMETER Name A new name for the group. Must be unique accross the org. .PARAMETER Description A new description for the group .PARAMETER OwnerID The userID of a user to transfer ownership to. NOTE: Must be either a Group Admin or System Admin .EXAMPLE $Group = New-SSGroupObject -GroupId '2331373580117892' -Name 'New Group Name' -OwnerID '2331373580117892' Set-SmartsheetGroup -GroupObject $group .EXAMPLE New-SSGroupObject -GroupId '2331373580117892' -Name 'New Group Name' -OwnerID '2331373580117892' | Set-SmartsheetGroup .NOTES This operation is only available to group administrators and system administrators. #> [CmdletBinding(DefaultParameterSetName = 'Params')] Param ( [Parameter(ParameterSetName = 'GroupObject', Mandatory = $true, ValueFromPipeline = $true)] [ValidateNotNullOrEmpty()] [Alias('InputObject')] [Smartsheet.Api.Models.Group[]] $GroupObject, [Parameter(ParameterSetName = 'Params', Mandatory = $true)] [ValidateNotNullOrEmpty()] [long] $GroupID, [Parameter(ParameterSetName = 'Params')] [ValidateNotNullOrEmpty()] [string] $Name, [Parameter(ParameterSetName = 'Params')] [string] $Description, [Parameter(ParameterSetName = 'Params')] [ValidateNotNullOrEmpty()] [long] $OwnerID ) Begin { If ([String]::IsNullOrEmpty($Script:SmartsheetClient)) { Throw "Smartsheet API Client has not yet been initialized. Please run Initialize-SmartsheetClient and try again." } } Process { If ($PSCmdlet.ParameterSetName -eq 'Params') { $GroupObject = New-SSGroupObject -GroupID $GroupID $PSBoundParameters.Keys.Where{ $_ -ne 'GroupID' }.Foreach{ $GroupObject.$_ = $PSBoundParameters[$_] } } ForEach ($GO In $GroupObject) { Try { $script:SmartsheetClient.GroupResources.UpdateGroup($GO) } Catch { If ($ErrorActionPreference -eq 'Stop') { $PSCmdlet.ThrowTerminatingError($_) } Else { Write-Error $_ } } } } } #EndRegion '.\Public\Groups\Set-SmartsheetGroup.ps1' 93 #Region '.\Public\Helpers\New-SSCellHyperlinkObject.ps1' -1 Function New-SSCellHyperlinkObject { <# .SYNOPSIS Builds a hyperlink object to a URL, a sheet, or a report. .DESCRIPTION Builds a hyperlink object to a URL, a sheet, or a report. .PARAMETER ReportId The ID of a report to link to. .PARAMETER SheetId The ID of a sheet to link to. .PARAMETER SightId The ID of a sight/dashboard to link to. .PARAMETER URL A URL to link to. .EXAMPLE $HyperLink = New-SSCellHyperlinkObject -URL 'https://smartsheet-platform.github.io/api-docs/' $Cell = New-SSCellObject -ColumnId '7518312134403972' -HyperLink $HyperLink .NOTES If no parameters are specified, object will reset a hyperlink. #> [CmdletBinding(DefaultParameterSetName = 'URL')] [OutputType([Smartsheet.Api.Models.Hyperlink])] Param ( [Parameter(ParameterSetName = 'Report', Mandatory = $true)] [ValidateNotNullOrEmpty()] [long] $ReportId, [Parameter(ParameterSetName = 'Sheet', Mandatory = $true)] [ValidateNotNullOrEmpty()] [long] $SheetId, [Parameter(ParameterSetName = 'Sight', Mandatory = $true)] [ValidateNotNullOrEmpty()] [long] $SightId, [Parameter(ParameterSetName = 'URL', Mandatory = $true)] [ValidateNotNullOrEmpty()] [ValidatePattern('http(s)?://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?')] [string] $URL ) $HyperlinkObj = [Smartsheet.Api.Models.Hyperlink]::new() $PSBoundParameters.Keys.ForEach{ $HyperlinkObj.$_ = $PSBoundParameters[$_] } $HyperlinkObj } #EndRegion '.\Public\Helpers\New-SSCellHyperlinkObject.ps1' 62 #Region '.\Public\Helpers\New-SSCellLinkObject.ps1' -1 Function New-SSCellLinkObject { <# .SYNOPSIS Builds a CellLink object that can be added to a cell object .DESCRIPTION Builds a CellLink object that can be added to a cell object to link data from a cell in one sheet to a cell in another sheet. .PARAMETER ColumnId The ColumnId of the cell to link .PARAMETER RowId The RowId of the cell to link .PARAMETER SheetId The SheetId of the cell to link .EXAMPLE $CellLink = New-SSCellLinkObject -ColumnId '1888812600190852' -RowId '6572427401553796' -SheetId '2068827774183300' $Cell = New-SSCellObject -ColumnId '7518312134403972' -LinkInFromCell $CellLink .NOTES A given row or cell update operation may contain only link updates, or no link updates. Attempting to mix row/cell updates with cell link updates results in error code 1115. Additionally, a CellLink object can only be added to an existing cell, so the cell.linkInFromCell attribute is not allowed when POSTing a new row to a sheet. #> [CmdletBinding()] [OutputType([Smartsheet.Api.Models.CellLink])] Param ( [Parameter(Mandatory = $true)] [ValidateNotNullOrEmpty()] [long] $ColumnId, [Parameter(Mandatory = $true)] [ValidateNotNullOrEmpty()] [long] $RowId, [Parameter(Mandatory = $true)] [ValidateNotNullOrEmpty()] [long] $SheetId ) $CellLink = [Smartsheet.Api.Models.CellLink]::new() $PSBoundParameters.Keys.ForEach{ $CellLink.$_ = $PSBoundParameters[$_] } $CellLink } #EndRegion '.\Public\Helpers\New-SSCellLinkObject.ps1' 52 #Region '.\Public\Helpers\New-SSCellObject.ps1' -1 Function New-SSCellObject { <# .SYNOPSIS Builds a new cell object that can be used to create or update rows in sheets .DESCRIPTION Builds a new cell object that can be used to create or update rows in sheets .PARAMETER ColumnID The Id of the column that the cell is located in .PARAMETER Value A string, a number, or a Boolean value .PARAMETER OverrideValidation (Admin only) Indicates whether the cell value can contain a value outside of the validation limits (value = true). .PARAMETER Hyperlink A hyperlink to a URL, sheet, reportor dashboard. When used, the 'Value' parameter can be a string or null. If null: If the hyperlink is a URL link, the cell's value is set to the URL itself. If the hyperlink is a dashboard, report, or sheet link, the cell's value is set to the dashboard, report, or sheet name. .PARAMETER LinkInFromCell An inbound link from a cell in another sheet. This cell's value mirrors the linked cell's value. .EXAMPLE $Cell = New-SSCellObject -ColumnId '5005385858869124' #> [CmdletBinding(DefaultParameterSetName = 'NoLink')] [OutputType([Smartsheet.Api.Models.Cell])] Param ( [Parameter(Mandatory = $true)] [ValidateNotNullOrEmpty()] [long] $ColumnID, [AllowNull()] [object] $Value = $null, [Parameter(DontShow = $true)] [switch] $OverrideValidation, [bool] $Strict = $true, [Parameter(ParameterSetName = 'Hyperlink')] [ValidateNotNullOrEmpty()] [Smartsheet.Api.Models.Hyperlink] $Hyperlink, [Parameter(ParameterSetName = 'CellLink')] [ValidateNotNullOrEmpty()] [Alias('CellLink')] [Smartsheet.Api.Models.CellLink] $LinkInFromCell ) Process { If ($PSCmdlet.ParameterSetName -eq 'CellLink') { $Value = $null } If ($OverrideValidation) { $Strict = $false } $CellObject = [Smartsheet.Api.Models.Cell+AddCellBuilder]::new( $ColumnID, $Value ).Build() $PSBoundParameters.Keys.ForEach{ $CellObject.$_ = $PSBoundParameters[$_] } $CellObject } } #EndRegion '.\Public\Helpers\New-SSCellObject.ps1' 76 #Region '.\Public\Helpers\New-SSColumnObject.ps1' -1 Function New-SSColumnObject { <# .SYNOPSIS Builds a Smartsheet Column Object .DESCRIPTION Builds a Smartsheet Column Object that can be used to add or update columns on a sheet .PARAMETER Title The title of the column. Required if the column is new. .PARAMETER Description The description of the column. .PARAMETER Index Column index or position. Defaults to '0'. If multiple columns are added to a sheet, the index attribute must be set to the same value for all columns. Columns are inserted into the sheet starting at the specified position (index), in the sequence that the columns appear in the request. .PARAMETER Type The type used for the column. Defaults to "TEXT_NUMBER". .PARAMETER Primary Indicates if the column will be the "Primary" column of the sheet. NOTE: The praimary column can only have a type of "TEXT_NUMBER". A sheet can only have 1 primary column. .PARAMETER ID The ID of a column to update. .PARAMETER Hidden Indicates if the column will be hidden. .PARAMETER SystemColumnType System columns represent data that is filled in by Smartsheet and whose values cannot be changed by the user. .PARAMETER Width The display width of the column in pixels. .EXAMPLE $column1 = New-SSColumnObject -Title "Column 1" -Primary .EXAMPLE $Column = New-SSColumnObject -Title 'New Column Name' -Id '1888812600190852' #> [CmdletBinding(DefaultParameterSetName = 'RegularColumn')] Param ( [ValidateNotNullOrEmpty()] [string] $Title, [AllowNull()] [AllowEmptyString()] [string] $Description, [int] $Index = 0, [Parameter(ParameterSetName = 'RegularColumn')] [ValidateNotNullOrEmpty()] [Alias('ColumnType')] [Smartsheet.Api.Models.ColumnType] $Type = "TEXT_NUMBER", [Parameter(ParameterSetName = 'RegularColumn')] [switch] $Primary, [Alias('ColumnID')] [long] $ID, [switch] $Hidden, [Parameter(ParameterSetName = 'SystemColumn')] [Smartsheet.Api.Models.SystemColumnType] $SystemColumnType, [ValidateNotNullOrEmpty()] [long] $Width ) $ColumnObject = [Smartsheet.Api.Models.Column]::new() $PSBoundParameters.Keys.ForEach{ $ColumnObject.$_ = $PSBoundParameters[$_] } $ColumnObject } #EndRegion '.\Public\Helpers\New-SSColumnObject.ps1' 84 #Region '.\Public\Helpers\New-SSGroupObject.ps1' -1 Function New-SSGroupObject { <# .SYNOPSIS Creates a Group object that can be used to add memebers to a group .DESCRIPTION Creates a Group object that can be used to add memebers to a group .PARAMETER MemberEmail Email addresses of user to initially populate a new group .PARAMETER Name A name for the group. Must be unique within the org .PARAMETER Description A description of the group .PARAMETER GroupID The ID of the group to update .PARAMETER OwnerID The userID of a user to transfer ownership to. NOTE: Must be either a Group Admin or System Admin .EXAMPLE $Group = New-SSGroupObject -Name 'A new Group' -MemberEmail 'john.doe@example.com','Jane.doe@example.com' .EXAMPLE $Group = New-SSGroupObject -GroupId '2331373580117892' -Name 'New Group Name' -OwnerID '2331373580117892' #> [CmdletBinding(DefaultParameterSetName = 'New')] [OutputType([Smartsheet.Api.Models.Group])] Param ( [Parameter(ParameterSetName = 'New')] [ValidatePattern('^[^@\s]+@[^@\s]+\.[^@\s]+$')] [Alias('Email')] [string[]] $MemberEmail, [Parameter(ParameterSetName = 'New', Mandatory = $true)] [Parameter(ParameterSetName = 'Update')] [string] $Name, [string] $Description = $null, [Parameter(ParameterSetName = 'Update', Mandatory = $true)] [long] $GroupID, [Parameter(ParameterSetName = 'Update')] [long] $OwnerID ) Process { Switch ($PsCmdlet.ParameterSetName) { 'New' { $GroupObject = [Smartsheet.Api.Models.Group+CreateGroupBuilder]::new($Name, $Description) If ($MemberEmail) { [Smartsheet.Api.Models.GroupMember[]]$groupMembers = $MemberEmail.foreach{ [Smartsheet.Api.Models.GroupMember+AddGroupMemberBuilder]::new($_).Build() } [void]$GroupObject.SetMembers($groupMembers) } $GroupObject.Build() Break } 'Update' { $GroupObject = [Smartsheet.Api.Models.Group+UpdateGroupBuilder]::new($GroupID) Switch ($PSBoundParameters.Keys) { 'Name' { [void]$GroupObject.SetName($Name) } 'Description' { [void]$GroupObject.SetDescription($Description) } 'OwnerID' { [void]$GroupObject.SetOwnerId($OwnerID) } } $GroupObject.Build() Break } } } } #EndRegion '.\Public\Helpers\New-SSGroupObject.ps1' 89 #Region '.\Public\Helpers\New-SSRowObject.ps1' -1 Function New-SSRowObject { <# .SYNOPSIS Builds a row object used to add or update a row on a sheet. .DESCRIPTION Builds a row object used to add or update a row on a sheet. .PARAMETER Cells Cell objects to add or update in the row .PARAMETER ToTop Adds or moves the row to the top of the sheet .PARAMETER ToBottom Adds or moves the row to the bottom of the sheet .PARAMETER ParentId Adds or moves the row to the first child of the specified Id. .PARAMETER SiblingId Adds or moves the row to the next location below the the specified row at same hierarchical level. Can be paried with "Above" to place above the specified row. .PARAMETER Above When specified, adds or moves the row above the row specified in "SiblingId" at the same hierarchical level .PARAMETER Expanded Indicates whether the row is expanded or collapsed. .PARAMETER Locked Indicates that the row will be locked. .PARAMETER Indent The number of times to indent the row .PARAMETER Outdent The number of times to outdent the row .PARAMETER Id Id of a row to update .EXAMPLE $Cell1 = New-SSCellObject -ColumnId '7960873114331012' -Value $true $Cell2 = New-SSCellObject -ColumnId '642523719853956' -Value "Enabled" $Row1 = NewSSRowObject -ToBottom -Cells $Cell1,$Cell2 #> [CmdletBinding()] [OutputType([Smartsheet.Api.Models.Row])] Param ( [ValidateNotNullOrEmpty()] [Smartsheet.Api.Models.Cell[]] $Cells, [switch] $ToTop, [switch] $ToBottom, [ValidateNotNullOrEmpty()] [long] $ParentId, [ValidateNotNullOrEmpty()] [long] $SiblingId, [switch] $Above, [switch] $Expanded, [switch] $Locked, [int] $Indent, [int] $Outdent, [ValidateNotNullOrEmpty()] [Alias('RowId')] [long] $Id ) Process { $RowObj = [Smartsheet.Api.Models.Row]::new() $PSBoundParameters.Keys.ForEach{ $RowObj.$_ = $PSBoundParameters[$_] } $RowObj } } #EndRegion '.\Public\Helpers\New-SSRowObject.ps1' 91 #Region '.\Public\Helpers\New-SSUserObject.ps1' -1 Function New-SSUserObject { <# .SYNOPSIS Builds a Smartsheet User Object .DESCRIPTION Builds a Smartsheet User Object that can be used to add or update a user. .PARAMETER Email User's primary email address. .PARAMETER ID A description of the ID parameter. .PARAMETER FirstName User's first name. .PARAMETER LastName User's last name. .PARAMETER LicensedSheetCreator Indicates whether the user is a licensed user (can create and own sheets). .PARAMETER Admin Indicates whether the user is a system admin (can manage user accounts and organization account). .PARAMETER GroupAdmin Indicates whether the user is a group admin (can create and edit groups). .PARAMETER ResourceViewer Indicates whether the user is a resource viewer (can access resource views). .EXAMPLE New-SSUserObject -Email "test@example.com" -LicensedSheetCreator Returns a user object with the email of "test@example.com" that will be a licensed sheet creator that can be fed to Add-SmartsheetUser creating the account. #> [CmdletBinding(DefaultParameterSetName = 'NewUserObject')] [OutputType([Smartsheet.Api.Models.User])] Param ( [Parameter(ParameterSetName = 'NewUserObject', Mandatory = $true)] [string] $Email, [Parameter(ParameterSetName = 'UpdateUserObject', Mandatory = $true)] [long] $ID, [string] $FirstName, [string] $LastName, [Alias('Licensed')] [switch] $LicensedSheetCreator = $false, [Alias('IsAdmin')] [switch] $Admin, [switch] $GroupAdmin, [switch] $ResourceViewer ) Process { If ($PSCmdlet.ParameterSetName -eq 'NewUserObject') { $userObj = [Smartsheet.Api.Models.User+AddUserBuilder]::new($null, $false, $false).Build() } ElseIf ($PSCmdlet.ParameterSetName -eq 'UpdateUserObject') { $userObj = [Smartsheet.Api.Models.User+UpdateUserBuilder]::new($null, $false, $false).Build() } $PSBoundParameters.Keys.ForEach{ $userObj.$_ = $PSBoundParameters[$_] } $userObj } } #EndRegion '.\Public\Helpers\New-SSUserObject.ps1' 81 #Region '.\Public\Rows\Add-SmartsheetRow.ps1' -1 Function Add-SmartsheetRow { <# .SYNOPSIS Inserts one or more rows into the sheet specified. .DESCRIPTION Inserts one or more rows into the sheet specified. .PARAMETER SheetId The Id of the sheet to add rows to. .PARAMETER Rows One or more Row Objects to add to the specified sheet. .EXAMPLE $Cell1 = New-SSCellObject -ColumnId '7960873114331012' -Value $true $Cell2 = New-SSCellObject -ColumnId '642523719853956' -Value "Enabled" $Cell3 = New-SSCellObject -ColumnID '7960873114331012' -Value $false $Row1 = NewSSRowObject -ToBottom -Cells $Cell1,$Cell2 $Row2 = NewSSRowObject -ToTop -Cells $Cell3 Add-SmartsheetRow -SheetId '2331373580117892' -Rows $Row1,$Row2 .NOTES Column Ids must be valid for the sheet to which the row belongs, and must only be used once for each row in the operation. Cells of a project sheet in the "Finish Date" column cannot be updated via API. Cells of a project sheet in the "Start Date" column cannot be updated via API for rows that contain a value in the "Predecessor" column. Max length for a cell value is 4000 characters after which truncation occurs without warning. Empty string values are converted to null. Calculation errors or problems with a formula do not cause the API call to return an error code. Instead, the response contains the same value as in the UI, such as cell.value = "#CIRCULAR REFERENCE". #> [CmdletBinding()] Param ( [Parameter(Mandatory = $true)] [ValidateNotNullOrEmpty()] [long] $SheetId, [Parameter(Mandatory = $true)] [ValidateNotNullOrEmpty()] [Smartsheet.Api.Models.Row[]] $Rows ) Begin { If ([String]::IsNullOrEmpty($Script:SmartsheetClient)) { Throw "Smartsheet API Client has not yet been initialized. Please run Initialize-SmartsheetClient and try again." } } Process { Try { $Script:SmartsheetClient.SheetResources.RowResources.AddRows( $SheetId, $Rows ) } Catch { If ($ErrorActionPreference -eq 'Stop') { $PSCmdlet.ThrowTerminatingError($_) } Else { Write-Error $_ } } } } #EndRegion '.\Public\Rows\Add-SmartsheetRow.ps1' 66 #Region '.\Public\Rows\Copy-SmartsheetRow.ps1' -1 Function Copy-SmartsheetRow { <# .SYNOPSIS Copies the specified rows from one sheet to another. .DESCRIPTION Copies the specified rows from one sheet to another. .PARAMETER Source The ID of the sheet to copy rows from. .PARAMETER Destination The ID of the sheet to copy rows to. .PARAMETER Rows The ID of the row(s) to copy from the source sheet to the destination sheet. .PARAMETER Include A comma-separated list of row elements to copy in addition to the cell data .EXAMPLE Copy-SmartsheetRow -Source '4583173393803140' -Destination '2258256056870788' -Rows '145417762563972','8026717110462340' #> [CmdletBinding()] Param ( [Parameter(Mandatory = $true)] [ValidateNotNullOrEmpty()] [Alias('CopyFrom')] [long] $Source, [Parameter(Mandatory = $true)] [ValidateNotNullOrEmpty()] [Alias('CopyTo')] [long] $Destination, [Parameter(Mandatory = $true)] [ValidateNotNullOrEmpty()] [long[]] $Rows, [ValidateNotNullOrEmpty()] [Smartsheet.Api.Models.CopyRowInclusion[]] $Include = $null ) Begin { If ([String]::IsNullOrEmpty($Script:SmartsheetClient)) { Throw "Smartsheet API Client has not yet been initialized. Please run Initialize-SmartsheetClient and try again." } } Process { Try { $DestinationObj = [Smartsheet.Api.Models.CopyOrMoveRowDestination]::new() $DestinationObj.SheetId = $Destination $DirectiveObj = [Smartsheet.Api.Models.CopyOrMoveRowDirective]::new() $DirectiveObj.RowIds = $Rows $DirectiveObj.To = $DestinationObj $script:SmartsheetClient.SheetResources.RowResources.CopyRowsToAnotherSheet( $Source, $DirectiveObj, $Include, $true ) } Catch { If ($ErrorActionPreference -eq 'Stop') { $PSCmdlet.ThrowTerminatingError($_) } Else { Write-Error $_ } } } } #EndRegion '.\Public\Rows\Copy-SmartsheetRow.ps1' 79 #Region '.\Public\Rows\Get-SmartsheetRow.ps1' -1 Function Get-SmartsheetRow { <# .SYNOPSIS Retrieves the specified row .DESCRIPTION Retrieves the specified row .PARAMETER SheetID Sheet Id of the sheet being accessed. .PARAMETER RowID Row Id in the sheet being accessed. .PARAMETER Include A comma-separated list of elements to include in the response. .PARAMETER Exclude A comma-separated list of optional elements to not include in the response .EXAMPLE Get-SmartsheetRow -SheetID '4583173393803140' -RowID '2361756178769796' #> [CmdletBinding()] [OutputType([Smartsheet.Api.Models.Row])] Param ( [Parameter(Mandatory = $true)] [ValidateNotNullOrEmpty()] [long] $SheetID, [Parameter(Mandatory = $true)] [ValidateNotNullOrEmpty()] [long] $RowID, [ValidateNotNullOrEmpty()] [Smartsheet.Api.Models.RowInclusion[]] $Include = $null, [ValidateNotNullOrEmpty()] [Smartsheet.Api.Models.RowExclusion[]] $Exclude = $null ) Begin { If ([String]::IsNullOrEmpty($Script:SmartsheetClient)) { Throw "Smartsheet API Client has not yet been initialized. Please run Initialize-SmartsheetClient and try again." } } Process { Try { $script:SmartsheetClient.SheetResources.RowResources.GetRow( $SheetID, $RowID, $Include, $Exclude ) } Catch { If ($ErrorActionPreference -eq 'Stop') { $PSCmdlet.ThrowTerminatingError($_) } Else { Write-Error $_ } } } } #EndRegion '.\Public\Rows\Get-SmartsheetRow.ps1' 70 #Region '.\Public\Rows\Move-SmartsheetRow.ps1' -1 Function Move-SmartsheetRow { <# .SYNOPSIS Moves the specified rows from one sheet to another. .DESCRIPTION Moves the specified rows from one sheet to another. .PARAMETER Source The ID of the sheet to move rows from. .PARAMETER Destination The ID of the sheet to move rows to. .PARAMETER Rows The ID of the row(s) to move from the source sheet to the destination sheet. .PARAMETER Include A comma-separated list of row elements to move in addition to the cell data .EXAMPLE Move-SmartsheetRow -Source '4583173393803140' -Destination '2258256056870788' -Rows '145417762563972','8026717110462340' #> [CmdletBinding()] Param ( [Parameter(Mandatory = $true)] [ValidateNotNullOrEmpty()] [Alias('MoveFrom')] [long] $Source, [Parameter(Mandatory = $true)] [ValidateNotNullOrEmpty()] [Alias('MoveTo')] [long] $Destination, [Parameter(Mandatory = $true)] [ValidateNotNullOrEmpty()] [long[]] $Rows, [ValidateNotNullOrEmpty()] [Smartsheet.Api.Models.MoveRowInclusion[]] $Include = $null ) Begin { If ([String]::IsNullOrEmpty($Script:SmartsheetClient)) { Throw "Smartsheet API Client has not yet been initialized. Please run Initialize-SmartsheetClient and try again." } } Process { Try { $DestinationObj = [Smartsheet.Api.Models.CopyOrMoveRowDestination]::new() $DestinationObj.SheetId = $Destination $DirectiveObj = [Smartsheet.Api.Models.CopyOrMoveRowDirective]::new() $DirectiveObj.RowIds = $Rows $DirectiveObj.To = $DestinationObj $script:SmartsheetClient.SheetResources.RowResources.MoveRowsToAnotherSheet( $Source, $DirectiveObj, $Include, $true ) } Catch { If ($ErrorActionPreference -eq 'Stop') { $PSCmdlet.ThrowTerminatingError($_) } Else { Write-Error $_ } } } } #EndRegion '.\Public\Rows\Move-SmartsheetRow.ps1' 79 #Region '.\Public\Rows\Remove-SmartsheetRow.ps1' -1 Function Remove-SmartsheetRow { <# .SYNOPSIS Deletes one or more rows from the sheet specified. .DESCRIPTION Deletes one or more rows from the sheet specified. .PARAMETER SheetId The ID of the sheet to remove rows from .PARAMETER RowIds The ID of the row(s) to delete from the specified sheet. .PARAMETER Force Deletes the specified rows without prompting .EXAMPLE Remove-SmartsheetRow -SheetId '2252168947361668' -RowIds '207098194749316','207098194749317' -Force .NOTES This operation deletes ALL child rows of the specified row. #> [CmdletBinding(ConfirmImpact = 'High', SupportsShouldProcess = $true)] Param ( [Parameter(Mandatory = $true)] [ValidateNotNullOrEmpty()] [long] $SheetId, [Parameter(Mandatory = $true)] [ValidateNotNullOrEmpty()] [long[]] $RowIds, [switch] $Force ) Begin { If ([String]::IsNullOrEmpty($Script:SmartsheetClient)) { Throw "Smartsheet API Client has not yet been initialized. Please run Initialize-SmartsheetClient and try again." } } Process { Try { If ($Force -or $pscmdlet.ShouldProcess("$($RowIds.count) rows will be deleted. This cannot be undone")) { $Script:SmartsheetClient.SheetResources.RowResources.DeleteRows( $SheetId, $RowIds, $true ) } } Catch { If ($ErrorActionPreference -eq 'Stop') { $PSCmdlet.ThrowTerminatingError($_) } Else { Write-Error $_ } } } } #EndRegion '.\Public\Rows\Remove-SmartsheetRow.ps1' 66 #Region '.\Public\Rows\Set-SmartsheetRow.ps1' -1 Function Set-SmartsheetRow { <# .SYNOPSIS Updates one or more rows into the sheet specified. .DESCRIPTION Updates one or more rows into the sheet specified. .PARAMETER SheetId The Id of the sheet to Update rows in. .PARAMETER Rows One or more Row Objects to update on the specified sheet. .EXAMPLE $Cell1 = New-SSCellObject -ColumnId '7960873114331012' -Value $false $Cell2 = New-SSCellObject -ColumnId '642523719853956' -Value "Disabled" $Row = NewSSRowObject -Id '6572427401553796' -Cells $Cell1,$Cell2 Set-SmartsheetRow -SheetId '2068827774183300' -Rows $Row .NOTES Column Ids must be valid for the sheet to which the row belongs, and must only be used once for each row in the operation. Cells of a project sheet in the "Finish Date" column cannot be updated via API. Cells of a project sheet in the "Start Date" column cannot be updated via API for rows that contain a value in the "Predecessor" column. Max length for a cell value is 4000 characters after which truncation occurs without warning. Empty string values are converted to null. Calculation errors or problems with a formula do not cause the API call to return an error code. Instead, the response contains the same value as in the UI, such as cell.value = "#CIRCULAR REFERENCE". #> [CmdletBinding()] Param ( [Parameter(Mandatory = $true)] [ValidateNotNullOrEmpty()] [long] $SheetId, [Parameter(Mandatory = $true)] [ValidateNotNullOrEmpty()] [Smartsheet.Api.Models.Row[]] $Rows ) Begin { If ([String]::IsNullOrEmpty($Script:SmartsheetClient)) { Throw "Smartsheet API Client has not yet been initialized. Please run Initialize-SmartsheetClient and try again." } } Process { Try { $Script:SmartsheetClient.SheetResources.RowResources.UpdateRows( $SheetId, $Rows ) } Catch { If ($ErrorActionPreference -eq 'Stop') { $PSCmdlet.ThrowTerminatingError($_) } Else { Write-Error $_ } } } } #EndRegion '.\Public\Rows\Set-SmartsheetRow.ps1' 64 #Region '.\Public\Search\Search-SmartsheetSheet.ps1' -1 Function Search-SmartsheetSheet { <# .SYNOPSIS Searches for the specified text in a sheet. .DESCRIPTION Searches for the specified text in a sheet. By default will search all sheets the user has access two unless a sheetID is specified .PARAMETER Query Text with which to perform the search. .PARAMETER SheetID Sheet Id of the sheet being searched .EXAMPLE Search-SmartsheetSheets -Query 'Stuff' #> [CmdletBinding()] [OutputType([Smartsheet.Api.Models.SearchResult])] Param ( [Parameter(Mandatory = $true)] [string] $Query, [long] $SheetID ) Begin { If ([String]::IsNullOrEmpty($Script:SmartsheetClient)) { Throw "Smartsheet API Client has not yet been initialized. Please run Initialize-SmartsheetClient and try again." } } Process { Try { If ($SheetID) { $Script:SmartsheetClient.SearchResources.SearchSheet( $SheetID, $Query ) } Else { $script:SmartsheetClient.SearchResources.Search($Query) } } Catch { If ($ErrorActionPreference -eq 'Stop') { $PSCmdlet.ThrowTerminatingError($_) } Else { Write-Error $_ } } } } #EndRegion '.\Public\Search\Search-SmartsheetSheet.ps1' 58 #Region '.\Public\Sheets\Add-SmartsheetSheet.ps1' -1 Function Add-SmartsheetSheet { <# .SYNOPSIS Creates a sheet from scratch .DESCRIPTION Creates a sheet from scratch in either the user's "Sheets" folder, or the specified folder or workspace .PARAMETER Name The name for the new sheet. .PARAMETER Column One or more column objects built using New-SSColumnObject. .PARAMETER WorkspaceID The ID of a workspace to create the sheet in. .PARAMETER FolderID The ID of a folder to create the sheet in. .PARAMETER HomeFolder Specified the new sheet should be created in the users "Sheets" folder .EXAMPLE $column1 = New-SSColumnObject -Title "Column 1" -Primary $column2 = New-SSColumnObject -Title "Second Column" -Type CHECKBOX Add-SmartsheetSheet -Column $column1,$column2 .NOTES Additional information about the function. #> [CmdletBinding(DefaultParameterSetName = 'Home')] [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSReviewUnusedParameter', '', Justification='Param used for ParameterSetName matching')] Param ( [Parameter(Mandatory = $true)] [Alias('Title')] [string] $Name, [Parameter(Mandatory = $true)] [Smartsheet.Api.Models.Column[]] $Column, [Parameter(ParameterSetName = 'Workspace', Mandatory = $true)] [long] $WorkspaceID, [Parameter(ParameterSetName = 'Folder', Mandatory = $true)] [long] $FolderID, [Parameter(ParameterSetName = 'Home')] [switch] $HomeFolder ) Begin { If ([String]::IsNullOrEmpty($Script:SmartsheetClient)) { Throw "Smartsheet API Client has not yet been initialized. Please run Initialize-SmartsheetClient and try again." } $NewSheet = [Smartsheet.Api.Models.Sheet+CreateSheetBuilder]::($Name, $Column).Build() } Process { Try { If ($PsCmdlet.ParameterSetName -eq 'Workspace') { $Script:SmartsheetClient.WorkspaceResources.SheetResources.CreateSheet( $WorkspaceID, $NewSheet ) } ElseIf ($PsCmdlet.ParameterSetName -eq 'Folder') { $Script:SmartsheetClient.FolderResources.SheetResources.CreateSheet( $FolderID, $NewSheet ) } Else { $Script:SmartsheetClient.SheetResources.CreateSheet( $NewSheet ) } } Catch { If ($ErrorActionPreference -eq 'Stop') { $PSCmdlet.ThrowTerminatingError($_) } Else { Write-Error $_ } } } } #EndRegion '.\Public\Sheets\Add-SmartsheetSheet.ps1' 94 #Region '.\Public\Sheets\Add-SmartsheetSheetFromTemplate.ps1' -1 Function Add-SmartsheetSheetFromTemplate { <# .SYNOPSIS Creates a sheet from a template .DESCRIPTION Creates a sheet from a template in either the user's "Sheets" folder, or the specified folder or workspace .PARAMETER Name Name of the new sheet .PARAMETER FromID Template Id from which to create the sheet. .PARAMETER Includes Additional parameter to create a sheet from template. A comma-separated list of elements to copy from the template. .PARAMETER WorkspaceID Workspace Id where the sheet will be created .PARAMETER FolderID Folder Id where the sheet will be created .PARAMETER HomeFolder Indicates that the new sheet should be created in the user's "Sheets" folder. .EXAMPLE Add-SmartsheetSheetFromTemplate -Title "A new sheet" -FromID '7679398137620356' -Include ATTACHMENTS,DISCUSSIONS .NOTES Additional information about the function. #> [CmdletBinding(DefaultParameterSetName = 'Home')] [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSReviewUnusedParameter', '', Justification='Param used for ParameterSetName matching')] Param ( [Parameter(Mandatory = $true)] [Alias('Title')] [string] $Name, [Parameter(Mandatory = $true)] [Alias('CopyFrom', 'TemplateID')] [long] $FromID, [Smartsheet.Api.Models.TemplateInclusion[]] $Includes = $null, [Parameter(ParameterSetName = 'Workspace', Mandatory = $true)] [long] $WorkspaceID, [Parameter(ParameterSetName = 'Folder', Mandatory = $true)] [long] $FolderID, [Parameter(ParameterSetName = 'Home')] [switch] $HomeFolder ) Begin { If ([String]::IsNullOrEmpty($Script:SmartsheetClient)) { Throw "Smartsheet API Client has not yet been initialized. Please run Initialize-SmartsheetClient and try again." } $NewSheet = [Smartsheet.Api.Models.Sheet+CreateSheetFromTemplateBuilder]::New($Name, $FromID).Build() } Process { Try { If ($PsCmdlet.ParameterSetName -eq 'Workspace') { $Script:SmartsheetClient.WorkspaceResources.SheetResources.CreateSheetFromTemplate( $WorkspaceID, $NewSheet, $Includes ) } ElseIf ($PsCmdlet.ParameterSetName -eq 'Folder') { $Script:SmartsheetClient.FolderResources.SheetResources.CreateSheetFromTemplate( $FolderID, $NewSheet, $Includes ) } Else { $Script:SmartsheetClient.SheetResources.CreateSheetFromTemplate( $NewSheet, $Includes ) } } Catch { If ($ErrorActionPreference -eq 'Stop') { $PSCmdlet.ThrowTerminatingError($_) } Else { Write-Error $_ } } } } #EndRegion '.\Public\Sheets\Add-SmartsheetSheetFromTemplate.ps1' 100 #Region '.\Public\Sheets\Copy-SmartsheetSheet.ps1' -1 Function Copy-SmartsheetSheet { <# .SYNOPSIS Creates a copy of the specified sheet. .DESCRIPTION Creates a copy of the specified sheet. .PARAMETER SheetID Sheet Id of the sheet being copied .PARAMETER DestinationID Id of the destination container (when copying or moving a folder or a sheet). Required if destinationType is "folder" or "workspace" If destinationType is "home", this value must be null. .PARAMETER DestinationType Type of the destination container (when copying or moving a folder or a sheet). One of the following values: folder home workspace .PARAMETER NewName Name of the newly created sheet .PARAMETER Includes A comma-separated list of elements to copy .EXAMPLE Copy-SmartsheetSheet -SheetID '9283173393803140' -DestinationID '3791509922310020' -DestinationType FOLDER -NewName 'A copy of sheet 1' .EXAMPLE Copy-SmartsheetSheet -SheetID '9283173393803140' -NewName 'Another copy of a sheet' -Includes DATA #> [CmdletBinding()] Param ( [Parameter(Mandatory = $true)] [long] $SheetID, [Parameter(Mandatory = $false)] [AllowNull()] [long] $DestinationID = $null, [Smartsheet.Api.Models.DestinationType] $DestinationType = "HOME", [Parameter(Mandatory = $true)] [string] $NewName, [Smartsheet.Api.Models.SheetCopyInclusion[]] $Includes = $null ) Begin { If ([String]::IsNullOrEmpty($Script:SmartsheetClient)) { Throw "Smartsheet API Client has not yet been initialized. Please run Initialize-SmartsheetClient and try again." } } Process { $Destination = [Smartsheet.Api.Models.ContainerDestination]::new() $Destination.DestinationId = $DestinationID $Destination.DestinationType = $DestinationType $Destination.NewName = $NewName Try { $script:SmartsheetClient.SheetResources.CopySheet( $SheetID, $Destination, $Includes ) } Catch { If ($ErrorActionPreference -eq 'Stop') { $PSCmdlet.ThrowTerminatingError($_) } Else { Write-Error $_ } } } } #EndRegion '.\Public\Sheets\Copy-SmartsheetSheet.ps1' 82 #Region '.\Public\Sheets\Get-SmartsheetSheet.ps1' -1 <# .SYNOPSIS Retrieves a list of sheets .DESCRIPTION Retrieves a list of sheets. By default this will be sheets the calling user has access to, but if the user is a system administrator they can use the "ListOrgSheets" switch to list all sheets owned by members of the organization. .PARAMETER ListOrgSheets Gets a summarized list of all sheets owned by the members of the organization account. NOTE: This operation is only available to system administrators .PARAMETER ModifiedSince When specified with a date and time value, response only includes the objects that are modified on or after the date and time specified. If you need to keep track of frequent changes, it may be more useful to use Read-SmartsheetSheet and reference the 'Version' property. .PARAMETER Include A comma-separated list of optional elements to include in the respons. .EXAMPLE Get-SmartsheetSheet .EXAMPLE Get-SmartsheetSheet -ListOrgSheets #> Function Get-SmartsheetSheet { [CmdletBinding(DefaultParameterSetName = 'Individual')] [OutputType([Smartsheet.Api.Models.Sheet[]])] Param ( [Parameter(ParameterSetName = 'FullOrg')] [switch] $ListOrgSheets, [nullable[datetime]] $ModifiedSince = $null, [Parameter(ParameterSetName = 'Individual')] [ValidateNotNullOrEmpty()] [Smartsheet.Api.Models.SheetInclusion[]] $Include = $null ) Begin { If ([String]::IsNullOrEmpty($Script:SmartsheetClient)) { Throw "Smartsheet API Client has not yet been initialized. Please run Initialize-SmartsheetClient and try again." } $PagingParams = [Smartsheet.Api.Models.PaginationParameters]::new($true, $null, $null) } Process { Try { If ($ListOrgSheets) { $Script:SmartsheetClient.UserResources.SheetResources.ListOrgSheets( $PagingParams, $ModifiedSince ).data } Else { $Script:SmartsheetClient.SheetResources.ListSheets( $Include, $PagingParams, $ModifiedSince ).data } } Catch { If ($ErrorActionPreference -eq 'Stop') { $PSCmdlet.ThrowTerminatingError($_) } Else { Write-Error $_ } } } } #EndRegion '.\Public\Sheets\Get-SmartsheetSheet.ps1' 73 #Region '.\Public\Sheets\Move-SmartsheetSheet.ps1' -1 Function Move-SmartsheetSheet { <# .SYNOPSIS Moves the specified sheet to a new location. .DESCRIPTION Moves the specified sheet to a new location. When a sheet that is shared to one or more users and/or groups is moved into or out of a workspace, those sheet-level shares are preserved. .PARAMETER SheetID Sheet Id of the sheet being accessed. .PARAMETER DestinationID Id of the destination container (when copying or moving a folder or a sheet). Required if destinationType is "folder" or "workspace" If destinationType is "home", this value must be null. .PARAMETER DestinationType Type of the destination container (when copying or moving a folder or a sheet). One of the following values: folder home workspace .EXAMPLE Move-SmartsheetSheet -SheetID '9283173393803140' -DestinationID '3791509922310020' -DestinationType FOLDER .EXAMPLE Move-SmartsheetSheet -SheetID '9283173393803140' #> [CmdletBinding()] Param ( [long] $SheetID, [AllowNull()] [long] $DestinationID = $null, [Smartsheet.Api.Models.DestinationType] $DestinationType = "HOME" ) Begin { If ([String]::IsNullOrEmpty($Script:SmartsheetClient)) { Throw "Smartsheet API Client has not yet been initialized. Please run Initialize-SmartsheetClient and try again." } } Process { $Destination = [Smartsheet.Api.Models.ContainerDestination]::new() $Destination.DestinationId = $DestinationID $Destination.DestinationType = $DestinationType Try { $script:SmartsheetClient.SheetResources.MoveSheet( $SheetID, $Destination ) } Catch { If ($ErrorActionPreference -eq 'Stop') { $PSCmdlet.ThrowTerminatingError($_) } Else { Write-Error $_ } } } } #EndRegion '.\Public\Sheets\Move-SmartsheetSheet.ps1' 67 #Region '.\Public\Sheets\Read-SmartsheetSheet.ps1' -1 Function Read-SmartsheetSheet { <# .SYNOPSIS Gets the sheet specified by SheetID. Returns the sheet, including rows, and optionally populated with discussion and attachment objects. .DESCRIPTION Gets the sheet specified by SheetID. Returns the sheet, including rows, and optionally populated with discussion and attachment objects. .PARAMETER SheetID Sheet Id of the sheet being accessed. .PARAMETER Include A comma-separated list of optional elements to include in the response .PARAMETER Exclude A comma-separated list of optional elements to not include in the response .PARAMETER ColumnIDs A comma-separated list of column ids. The response contains only the specified columns in the "columns" array, and individual rows' "cells" array only contains cells in the specified columns. .PARAMETER RowIds A comma-separated list of row Ids on which to filter the rows included in the result. .PARAMETER RowNumbers A comma-separated list of row numbers on which to filter the rows included in the result. Non-existent row numbers are ignored. .EXAMPLE Read-SmartsheetSheet -SheetID '4583173393803140' .EXAMPLE Read-SmartsheetSheet -SheetID '4583173393803140' -Include FILTERS,DISCUSSIONS -Exclude NONEXISTANTCELLS #> [CmdletBinding()] [OutputType([Smartsheet.Api.Models.Sheet])] Param ( [Parameter(Mandatory = $true, ValueFromPipeline = $true)] [ValidateNotNullOrEmpty()] [long] $SheetID, [ValidateNotNullOrEmpty()] [Smartsheet.Api.Models.SheetLevelInclusion[]] $Include = $null, [ValidateNotNullOrEmpty()] [Smartsheet.Api.Models.SheetLevelExclusion[]] $Exclude = $null, [long[]] $ColumnIDs = $null, [long[]] $RowIds = $null, [int[]] $RowNumbers = $null, [int] [ValidateRange(0,2)] $level = 0 ) Begin { If ([String]::IsNullOrEmpty($Script:SmartsheetClient)) { Throw "Smartsheet API Client has not yet been initialized. Please run Initialize-SmartsheetClient and try again." } } Process { Try { $script:SmartsheetClient.SheetResources.GetSheet( $SheetID, $Include, $Exclude, $RowIds, $RowNumbers, $ColumnIDs, $null, $null, $null, $level ) } Catch { If ($ErrorActionPreference -eq 'Stop') { $PSCmdlet.ThrowTerminatingError($_) } Else { Write-Error $_ } } } } #EndRegion '.\Public\Sheets\Read-SmartsheetSheet.ps1' 91 #Region '.\Public\Sheets\Remove-SmartsheetSheet.ps1' -1 Function Remove-SmartsheetSheet { <# .SYNOPSIS Deletes a specified sheet. .DESCRIPTION Deletes a specified sheet. This cannot be undone! .PARAMETER SheetId The Id of the sheet(s) to delete. .PARAMETER Force Forces the sheet to be deleted without prompting .EXAMPLE Remove-SmartsheetSheet -SheetId 1531988831168388 -Force #> [CmdletBinding(ConfirmImpact = 'High', SupportsShouldProcess = $true)] Param ( [Parameter(Mandatory = $true)] [ValidateNotNullOrEmpty()] [long[]] $SheetId, [switch] $Force ) Begin { If ([String]::IsNullOrEmpty($Script:SmartsheetClient)) { Throw "Smartsheet API Client has not yet been initialized. Please run Initialize-SmartsheetClient and try again." } } Process { ForEach ($ID In $SheetId) { Try { $SheetObj = Get-SmartsheetSheet -SheetID $ID If ($Force -or $pscmdlet.ShouldProcess("The sheet $($SheetObj.Name) will be deleted. This cannot be undone")) { $Script:SmartsheetClient.SheetResources.DeleteSheet( $SheetObj.ID) } } Catch { If ($ErrorActionPreference -eq 'Stop') { $PSCmdlet.ThrowTerminatingError($_) } Else { Write-Error $_ } } } } } #EndRegion '.\Public\Sheets\Remove-SmartsheetSheet.ps1' 56 #Region '.\Public\Users\Add-SmartsheetUser.ps1' -1 Function Add-SmartsheetUser { <# .SYNOPSIS Adds a user to the organization account. .DESCRIPTION Adds a user to the organization account. .PARAMETER UserObject One or more user objects created using New-SSUserObject. .PARAMETER sendEmail Indicates whether to send a welcome email. Defaults to false. .EXAMPLE $User = New-SSUserObject -Email "test@example.com" -LicensedSheetCreator Add-SmartsheetUser -UserObject $User .EXAMPLE $User1 = New-SSUserObject -Email "test@example.com" -LicensedSheetCreator $user2 = New-SSUserObject -Email "secondTest@example.com" -LicensedSheetCreator -Admin Add-SmartsheetUser -UserObject $User1,$user2 .NOTES This operation is only available to system administrators If successful, and user auto provisioning (UAP) is on, and user matches the auto provisioning rules, user is added to the org. If UAP is off, or user does not match UAP rules, user is invited to the org and must explicitly accept the invitation to join. In some specific scenarios, supplied attributes such as firstName and lastName may be ignored. For example, if you are inviting an existing Smartsheet user to join your organization account, and the invited user has not yet accepted your invitation, any supplied firstName and lastName are ignored. #> [CmdletBinding()] Param ( [Parameter(Mandatory = $true, ValueFromPipeline = $true)] [Alias('User')] [Smartsheet.Api.Models.User[]] $UserObject, [switch] $sendEmail ) Begin { If ([String]::IsNullOrEmpty($Script:SmartsheetClient)) { Throw "Smartsheet API Client has not yet been initialized. Please run Initialize-SmartsheetClient and try again." } } Process { ForEach ($U In $UserObject) { If ([string]::IsNullOrEmpty($U.Email)) { Write-Error "No email address specified. Please set the Email property of the userobject with that of the user to add" Continue } Try { Write-Verbose "Adding user $($U.Email)" $script:SmartsheetClient.UserResources.AddUser($U, $sendEmail.IsPresent, $null ) Write-Verbose "User $($U.Email) has been Added." } Catch { If ($ErrorActionPreference -eq 'Stop') { $PSCmdlet.ThrowTerminatingError($_) } Else { Write-Error $_ } } } } } #EndRegion '.\Public\Users\Add-SmartsheetUser.ps1' 76 #Region '.\Public\Users\Get-SmartsheetUser.ps1' -1 Function Get-SmartsheetUser { <# .SYNOPSIS Returns specified Smartsheet user or list of users .DESCRIPTION Returns the specified Smartsheet user or a list of users .PARAMETER UserID The ID of a specific user to get. .PARAMETER Email The email address or list of email addresses of users to get. .PARAMETER List Returns an array of all users in the org. .PARAMETER Me Returns a user object representing the calling user. .EXAMPLE Get-SmartsheetUsers -Email "John.Doe@example.com" Returns user info for a smartsheet user with the email of "John.Doe@exampled.com". .EXAMPLE Get-SmartsheetUsers -Email "John.Doe@example.com","Jane.Doe@example.com" Returns user info for both matching users .EXAMPLE Get-SmartsheetUsers -List Gets a list of users in the organization account. .EXAMPLE Get-SmartsheetUsers -Me Gets the current user. .OUTPUTS Smartsheet.Api.Models.User, Smartsheet.Api.Models.UserProfile, Smartsheet.Api.Models.User, Smartsheet.Api.Models.UserProfile #> [CmdletBinding(DefaultParameterSetName = 'Me', SupportsPaging = $true)] [OutputType([Smartsheet.Api.Models.UserProfile], ParameterSetName = 'Me')] [OutputType([Smartsheet.Api.Models.User], ParameterSetName = 'List')] [OutputType([Smartsheet.Api.Models.UserProfile], ParameterSetName = 'UserID')] [OutputType([Smartsheet.Api.Models.User], ParameterSetName = 'Email')] [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSReviewUnusedParameter', '', Justification='Param used for ParameterSetName matching')] Param ( [Parameter(ParameterSetName = 'UserID')] [long] $UserID, [Parameter(ParameterSetName = 'Email')] [string[]] $Email, [Parameter(ParameterSetName = 'List')] [switch] $List, [Parameter(ParameterSetName = 'Me')] [switch] $Me ) Begin { If ([String]::IsNullOrEmpty($Script:SmartsheetClient)) { Throw "Smartsheet API Client has not yet been initialized. Please run Initialize-SmartsheetClient and try again." } $PagingParams = [Smartsheet.Api.Models.PaginationParameters]::new($true, $null, $null) } Process { Try { Switch ($PSCmdlet.ParameterSetName) { "UserID" { $script:SmartSheetClient.UserResources.GetUser($UserID) } "Email" { $Script:SmartsheetClient.UserResources.ListUsers($Email, $PagingParams).Data } "List" { $Script:SmartsheetClient.UserResources.ListUsers($null, $PagingParams).Data } "Me" { $script:SmartSheetClient.UserResources.GetCurrentUser() } } } Catch { If ($ErrorActionPreference -eq 'Stop') { $PSCmdlet.ThrowTerminatingError($_) } Else { Write-Error $_ } } } } #EndRegion '.\Public\Users\Get-SmartsheetUser.ps1' 103 #Region '.\Public\Users\Remove-SmartsheetUser.ps1' -1 Function Remove-SmartsheetUser { <# .SYNOPSIS Removes A Smartsheet User from an organization account .DESCRIPTION Removes a user from an organization account. User is transitioned to a free collaborator with read-only access to owned dashboards, reports, sheets, workspaces, and any shared templates (unless those are optionally transferred to another user). .PARAMETER User The userID or email of the user to be removed from the organization .PARAMETER RemoveFromSharing Switch to remove the user from sharing for all sheets/workspaces in the organization account. If not specified, user is not removed from sharing. .PARAMETER TransferTo The userID or email of the user to transfer ownership to. If the user being removed owns groups, they are transferred to this user. If the user owns sheets, and transferSheets is true, the removed user's sheets are transferred to this user. NOTE: Required if user owns groups NOTE: If the TransferTo parameter is specified and the removed user owns groups, the user specified via the TransferTo parameter must have group admin rights. .PARAMETER TransferSheets If set, the removed user's sheets are transferred to the user specified with the TransferTo parameter. Else, sheets are not transferred .PARAMETER Force Forces deletion of specified user without prompting .EXAMPLE Remove-SmartsheetUser -User 'Bad.Employee@example.com' -RemoveFromSharing Example Remove-SmartsheetUser -User '94094820842' -TransferTo 'John.Manager@example.com' -TransferSheets .NOTES This operation is only available to system administrators. The transferTo and transferSheets parameters cannot be specified for a user who has not yet accepted an invitation to join the organization account (that is, if user status=PENDING). #> [CmdletBinding(DefaultParameterSetName = 'Transfer', ConfirmImpact = 'High', SupportsShouldProcess = $true)] Param ( [Parameter(Mandatory = $true, ValueFromPipeline = $true)] [ValidateNotNullOrEmpty()] [string[]] $User, [switch] $RemoveFromSharing, [Parameter(ParameterSetName = 'Transfer', Mandatory = $false)] [Parameter(ParameterSetName = 'TransferSheets', Mandatory = $true)] [string] $TransferTo, [Parameter(ParameterSetName = 'TransferSheets')] [switch] $TransferSheets, [switch] $Force ) Begin { If ([String]::IsNullOrEmpty($Script:SmartsheetClient)) { Throw "Smartsheet API Client has not yet been initialized. Please run Initialize-SmartsheetClient and try again." } } Process { If (![String]::IsNullOrEmpty($TransferTo)) { If ($TransferTo -match "^[^@\s]+@[^@\s]+\.[^@\s]+$") { $TransferToObj = Get-SmartsheetUser -Email $TransferTo } Else { $TransferToObj = (Get-SmartsheetUser -UserID $TransferTo) } } ForEach ($U In $User) { If ($U -match "^[^@\s]+@[^@\s]+\.[^@\s]+$") { $UserObj = Get-SmartsheetUser -Email $U } Else { $UserObj = (Get-SmartsheetUser -UserID $U) } If ($Force -or $pscmdlet.ShouldProcess("Removing user with email $($UserObj.Email) from Org")) { Try { If ($TransferToObj) { $script:SmartsheetClient.UserResources.RemoveUser($userObj.ID, $TransferToObj.ID, $TransferSheets.IsPresent, $RemoveFromSharing.IsPresent ) } Else { $script:SmartsheetClient.UserResources.RemoveUser($userObj.ID, $null, $TransferSheets.IsPresent, $RemoveFromSharing.IsPresent ) } } Catch { If ($ErrorActionPreference -eq 'Stop') { $PSCmdlet.ThrowTerminatingError($_) } Else { Write-Error $_ } } } } } } #EndRegion '.\Public\Users\Remove-SmartsheetUser.ps1' 114 #Region '.\Public\Users\Set-SmartsheetUser.ps1' -1 Function Set-SmartsheetUser { <# .SYNOPSIS Updates a Smartsheet user .DESCRIPTION Updates a specified Smartsheet user account .PARAMETER UserObject A user object created with the New-SSUserObject cmdlet .EXAMPLE $User = New-SSUserObject -ID '82349925918590' -LicensedSheetCreator -Admin Set-SmartsheetUser -UserObject $user #> [CmdletBinding()] Param ( [Parameter(Mandatory = $true, ValueFromPipeline = $true)] [Alias('User')] [Smartsheet.Api.Models.User[]] $UserObject ) Begin { If ([String]::IsNullOrEmpty($Script:SmartsheetClient)) { Throw "Smartsheet API Client has not yet been initialized. Please run Initialize-SmartsheetClient and try again." } } Process { ForEach ($U In $UserObject) { If ([string]::IsNullOrEmpty($U.Id) -and ![string]::IsNullOrEmpty($U.Email)) { $U.Id = (Get-SmartsheetUser -Email $U.Email).Id } ElseIf ([string]::IsNullOrEmpty($U.Id) -and [string]::IsNullOrEmpty($U.Email)) { Write-Error "No UserID specified. Please set the ID property of the userobject with that of the user to update" Continue } Try { Write-Verbose "Updating user $($U.Id)" $script:SmartsheetClient.UserResources.UpdateUser($U) Write-Verbose "User $($U.Id) has been updated." } Catch { If ($ErrorActionPreference -eq 'Stop') { $PSCmdlet.ThrowTerminatingError($_) } Else { Write-Error $_ } } } } } #EndRegion '.\Public\Users\Set-SmartsheetUser.ps1' 58 |