SnipeitPS/SnipeitPS/Public/Set-SnipeItAsset.ps1
2021-06-07 21:16:51 +03:00

166 lines
3.9 KiB
PowerShell

<#
.SYNOPSIS
Update a specific Asset in the Snipe-it asset system
.DESCRIPTION
Long description
.PARAMETER id
ID of the Asset or array of IDs
.PARAMETER Name
Asset name
.PARAMETER Status_id
Status ID of the asset, this can be got using Get-Status
.PARAMETER Model_id
Model ID of the asset, this can be got using Get-Model
.PARAMETER last_checkout
Date the asset was last checked out
.PARAMETER assigned_to
The id of the user the asset is currently checked out to
.PARAMETER company_id
The id of an associated company id
.PARAMETER serial
Serial number of the asset
.PARAMETER order_number
Order number for the asset
.PARAMETER warranty_months
Number of months for the asset warranty
.PARAMETER purchase_cost
Purchase cost of the asset, without a currency symbol
.PARAMETER purchase_date
Date of asset purchase
.PARAMETER requestable
Whether or not the asset can be requested by users with the permission to request assets
.PARAMETER archived
Whether or not the asset is archived. Archived assets cannot be checked out and do not show up in the deployable asset screens
.PARAMETER rtd_location_id
The id that corresponds to the location where the asset is usually located when not checked out
.PARAMETER notes
Notes about asset
.PARAMETER RequestType
Http request type to send Snipe IT system. Defaults to Put youc use Patch if needed
.PARAMETER url
URL of Snipeit system, can be set using Set-SnipeItInfoeItInfo command
.PARAMETER apiKey
Users API Key for Snipeit, can be set using Set-SnipeItInfoeItInfo command
.PARAMETER customfields
Hastable of custom fields and extra fields that need passing through to Snipeit
.EXAMPLE
Set-SnipeItAsset -id 1 -status_id 1 -model_id 1 -name "Machine1"
.EXAMPLE
Set-SnipeItAsset -id 1 -status_id 1 -model_id 1 -name "Machine1" -CustomValues = @{ "_snipeit_os_5 = "Windows 10 Pro" }
.EXAMPLE
Get-SnipeItAsset -serial 12345678 | Set-SnipeItAsset -notes 'Just updated'
#>
function Set-SnipeItAsset()
{
[CmdletBinding(
SupportsShouldProcess = $true,
ConfirmImpact = "Medium"
)]
Param(
[parameter(mandatory = $true,ValueFromPipelineByPropertyName)]
[int[]]$id,
[AllowEmptyString()]
[string]$name,
[int]$status_id,
[int]$model_id,
[DateTime]$last_checkout,
[int]$assigned_to,
[int]$company_id,
[string]$serial,
[AllowEmptyString()]
[string]$order_number,
[int]$warranty_months,
[double]$purchase_cost,
[datetime]$purchase_date,
[bool]$requestable,
[bool]$archived,
[int]$rtd_location_id,
[string]$notes,
[ValidateSet("Put","Patch")]
[string]$RequestType = "Patch",
[parameter(mandatory = $true)]
[string]$url,
[parameter(mandatory = $true)]
[string]$apiKey,
[hashtable] $customfields
)
begin{
Test-SnipeItAlias -invocationName $MyInvocation.InvocationName -commandName $MyInvocation.MyCommand.Name
$Values = . Get-ParameterValue $MyInvocation.MyCommand.Parameters
if ($values['purchase_date']) {
$values['purchase_date'] = $values['purchase_date'].ToString("yyyy-MM-dd")
}
if ($customfields)
{
$Values += $customfields
}
$Body = $Values | ConvertTo-Json;
}
process {
foreach($asset_id in $id){
$Parameters = @{
Uri = "$url/api/v1/hardware/$asset_id"
Method = $RequestType
Body = $Body
Token = $apiKey
}
If ($PSCmdlet.ShouldProcess("ShouldProcess?"))
{
$result = Invoke-SnipeitMethod @Parameters
}
$result
}
}
}