Compare commits

...

8 commits

Author SHA1 Message Date
Petri Asikainen
d14244d727
Merge pull request #283 from snazy2000/develop
Merge Develop
Support for more search fields and updated documentation  @mattcarras
2022-08-31 22:11:12 +03:00
Petri Asikainen
fadfa2d797
Merge pull request #282 from mattcarras/feature/update_get_functions
Update Get Functions
2022-08-31 22:05:15 +03:00
Matthew Carras
3a5d951cb9 Update Get Functions
* Add additional parameters to Get functions, especially -name wherever possible.
* Add some missing function help
2022-08-31 14:30:45 -04:00
Petri Asikainen
7582b0fa1a
Merge pull request #278 from snazy2000/develop
Support for setting group on user creation  and api request throttling
Now there's API request throttling support in SnipeitPS . You can specify throttlelimit and period with Connect-SnipeitPS . After that SnipeitPS know when to pause. You can start limit 120 and period 60000 (ms) from hosted snipeit installation. For the fine tune there's throttlemode parameter that can be set to Burst, Constant or Adaptive.
2022-08-10 09:15:43 +03:00
Petri Asikainen
381b6e3586
Merge pull request #276 from PetriAsi/feature/throttlerequests
Feature/throttlerequests
2022-08-08 13:59:43 +03:00
Petri Asikainen
79b94981ec Support request throttling 2022-08-08 13:04:05 +03:00
Petri Asikainen
6b3bc0f459
Merge pull request #275 from chaosjester/develop
Add Groups to New/Set-SnipeitUser.ps1
2022-08-05 10:13:09 +03:00
chaosjester
4a889cfb44 Add Groups to New/Set-SnipeitUser.ps1 2022-07-29 23:47:38 +10:00
16 changed files with 404 additions and 4 deletions

View file

@ -118,6 +118,58 @@ function Invoke-SnipeitMethod {
Write-Debug "$($Body | ConvertTo-Json)"
#Check throttle limit
if ($SnipeitPSSession.throttleLimit -gt 0) {
Write-Verbose "Check for request throttling"
Write-debug "ThrottleMode: $($SnipeitPSSession.throttleMode)"
Write-debug "ThrottleLimit: $($SnipeitPSSession.throttleLimit)"
Write-debug "ThrottlePeriod: $($SnipeitPSSession.throttlePeriod)"
Write-debug "ThrottleThreshold: $($SnipeitPSSession.throttleThreshold)"
Write-debug "Current count: $($SnipeitPSSession.throttledRequests.count)"
#current request timestamps in period
$SnipeitPSSession.throttledRequests = ($SnipeitPSSession.throttledRequests).where({$_ -gt (get-date).AddMilliseconds( 0 - $SnipeitPSSession.throttlePeriod).ToFileTime()})
#make sure that we alway have list here
if($null -eq $SnipeitPSSession.throttledRequests) {
$SnipeitPSSession.throttledRequests = [System.Collections.ArrayList]::new()
}
$naptime = 0
switch ($SnipeitPSSession.throttleMode) {
"Burst" {
if ($SnipeitPSSession.throttledRequests.count -ge $SnipeitPSSession.throttleLimit) {
$naptime = [Math]::Round(((get-date).ToFileTime() - ($SnipeitPSSession.throttledRequests[0]))/10000)
}
}
"Constant" {
$prevrequesttime =[Math]::Round(((get-date).ToFileTime() - ($SnipeitPSSession.throttledRequests[$SnipeitPSSession.throttledRequests.count - 1]))/10000)
$naptime = [Math]::Round($SnipeitPSSession.throttlePeriod / $SnipeitPSSession.throttleLimit) - $prevrequesttime
}
"Adaptive" {
$unThrottledRequests = $SnipeitPSSession.throttleLimit * ($SnipeitPSSession.throttleThreshold / 100)
if($SnipeitPSSession.throttledRequests.count -ge $unThrottledRequests) {
#calculate time left in throttlePeriod and devide it for remaining requests
$remaining = $SnipeitPSSession.throttleLimit - $SnipeitPSSession.throttledRequests.count
if ($remaining -lt 1) {
$remaining = 1
}
$naptime = [Math]::Round((((get-date).ToFileTime() - ($SnipeitPSSession.throttledRequests[0]))/ 10000) / $remaining)
}
}
}
#Do we need a nap
if ($naptime -gt 0) {
Write-verbose "Throttling request for $naptime ms"
Start-Sleep -Milliseconds $naptime
}
$SnipeitPSSession.throttledRequests.Add((Get-Date).ToFileTime())
}
# Invoke the API
try {
Write-Verbose "[$($MyInvocation.MyCommand.Name)] Invoking method $Method to URI $URi"

View file

@ -20,6 +20,22 @@
PSCredential where username shoul be snipe it url and password should be
snipe it apikey.
.PARAMETER throttleLimit
Throttle request rate to nro of requests per throttlePeriod. Defaults to 0 that means no requests are not throttled.
.PARAMETER throttlePeriod
Throttle period time span in milliseconds defaults to 60 milliseconds.
.PARAMETER throttleThreshold
Threshold percentage of used request on period after request are throttled.
.PARAMETER throttleMode
RequestThrottling type. "Burst" allows all requests to be used in ThrottlePeriod without delays and then waits
until there's new requests avalable. With "Contant" mode there always delay between requests. Delay is calculated
by dividing throttlePeriod with throttleLimit. "Adaptive" mode allows throttleThreshold percentage of request to be
used with out delay, after threshold limit is reached next requests are delayded by dividing available requests
over throttlePeriod.
.EXAMPLE
Connect-SnipeitPS -Url $url -apiKey $myapikey
Connect to Snipe it api.
@ -61,7 +77,28 @@ function Connect-SnipeitPS {
[SecureString]$secureApiKey,
[Parameter(ParameterSetName='Connect with credential',Mandatory=$true)]
[PSCredential]$siteCred
[PSCredential]$siteCred,
[Parameter(ParameterSetName='Connect with url and apikey',Mandatory=$false)]
[Parameter(ParameterSetName='Connect with url and secure apikey',Mandatory=$false)]
[Parameter(ParameterSetName='Connect with credential',Mandatory=$false)]
[int]$throttleLimit,
[Parameter(ParameterSetName='Connect with url and apikey',Mandatory=$false)]
[Parameter(ParameterSetName='Connect with url and secure apikey',Mandatory=$false)]
[Parameter(ParameterSetName='Connect with credential',Mandatory=$false)]
[int]$throttlePeriod,
[Parameter(ParameterSetName='Connect with url and apikey',Mandatory=$false)]
[Parameter(ParameterSetName='Connect with url and secure apikey',Mandatory=$false)]
[Parameter(ParameterSetName='Connect with credential',Mandatory=$false)]
[int]$throttleThreshold,
[Parameter(ParameterSetName='Connect with url and apikey',Mandatory=$false)]
[Parameter(ParameterSetName='Connect with url and secure apikey',Mandatory=$false)]
[Parameter(ParameterSetName='Connect with credential',Mandatory=$false)]
[ValidateSet("Burst","Constant","Adaptive")]
[string]$throttleMode
)
@ -86,6 +123,21 @@ function Connect-SnipeitPS {
$SnipeitPSSession.apiKey = $siteCred.GetNetworkCredential().SecurePassword
}
}
if($null -eq $throttleLimit) { $throttleLimit = 0}
$SnipeitPSSession.throttleLimit = $throttleLimit
if($throttleThreshold -lt 1) { $throttleThreshold = 90}
$SnipeitPSSession.throttleThreshold = $throttleThreshold
if('' -eq $throttleMode) { $throttleMode = "Burst"}
$SnipeitPSSession.throttleMode = $throttleMode
if ($SnipeitPSSession.throttleLimit -gt 0) {
if($null -eq $throttlePeriod) { $throttlePeriod = 60000}
$SnipeitPSSession.throttlePeriod = $throttlePeriod
$SnipeitPSSession.throttledRequests = [System.Collections.ArrayList]::new()
}
Write-Debug "Site-url $($SnipeitPSSession.url)"
Write-Debug "Site apikey: $($SnipeitPSSession.apiKey)"

View file

@ -8,9 +8,24 @@ Gets a list of Snipe-it Accessories
.PARAMETER search
A text string to search the Accessory data
.PARAMETER user_id
Return Accessories checked out to user id
.PARAMETER id
A id of specific Accessory
.PARAMETER company_id
Optionally restrict Accessory results to this company_id field
.PARAMETER category_id
Optionally restrict Accessory results to this category_id field
.PARAMETER manufacturer_id
Optionally restrict Accessory results to this manufacturer_id field
.PARAMETER supplier_id
Optionally restrict Accessory results to this supplier_id field
.PARAMETER limit
Specify the number of results you wish to return. Defaults to 50. Defines batch size for -all

View file

@ -20,12 +20,21 @@ Retrieve a list of assets that are due for auditing soon.
.PARAMETER audit_overdue
Retrieve a list of assets that are overdue for auditing.
.PARAMETER user_id
Retrieve a list of assets checked out to user id.
.PARAMETER component_id
Retrieve a list of assets assigned this component id.
.PARAMETER name
Optionally restrict asset results to this asset name
.PARAMETER order_number
Optionally restrict asset results to this order number
.PARAMETER model_id
Optionally restrict asset results to this asset model ID
.PARAMETER category_id
Optionally restrict asset results to this category ID
@ -38,12 +47,22 @@ Optionally restrict asset results to this company ID
.PARAMETER location_id
Optionally restrict asset results to this location ID
.PARAMETER depreciation_id
Optionally restrict asset results to this depreciation ID
.PARAMETER requestable
Optionally restrict asset results to those set as requestable
.PARAMETER status
Optionally restrict asset results to one of these status types: RTD, Deployed, Undeployable, Deleted, Archived, Requestable
.PARAMETER status_id
Optionally restrict asset results to this status label ID
.PARAMETER customfields
Hastable of custom fields and extra fields for searching assets in Snipe-It.
Use internal field names from Snipe-It. You can use Get-CustomField to get internal field names.
.PARAMETER sort
Specify the column name you wish to sort by
@ -132,6 +151,9 @@ function Get-SnipeitAsset() {
[parameter(ParameterSetName='Assets with component id')]
[int]$component_id,
[parameter(ParameterSetName='Search')]
[string]$name,
[parameter(ParameterSetName='Search')]
[string]$order_number,
@ -162,6 +184,9 @@ function Get-SnipeitAsset() {
[parameter(ParameterSetName='Search')]
[int]$status_id,
[parameter(ParameterSetName='Search')]
[hashtable]$customfields,
[parameter(ParameterSetName='Search')]
[parameter(ParameterSetName='Assets due auditing soon')]
[parameter(ParameterSetName='Assets overdue for auditing')]
@ -211,6 +236,15 @@ function Get-SnipeitAsset() {
$SearchParameter = . Get-ParameterValue -Parameters $MyInvocation.MyCommand.Parameters -BoundParameters $PSBoundParameters
# Add in custom fields.
if ($customfields.Count -gt 0) {
foreach ($pair in $customfields.GetEnumerator()) {
if (-Not $SearchParameter.ContainsKey($pair.Name)) {
$SearchParameter.Add($pair.Name, $pair.Value)
}
}
}
switch ($PsCmdlet.ParameterSetName) {
'Search' { $api = "/api/v1/hardware" }
'Get with id' {$api= "/api/v1/hardware/$id"}

View file

@ -8,6 +8,9 @@ A text string to search the Categories data
.PARAMETER id
A id of specific Category
.PARAMETER name
Optionally restrict Category results to this Category name.
.PARAMETER limit
Specify the number of results you wish to return. Defaults to 50. Defines batch size for -all
@ -40,6 +43,9 @@ function Get-SnipeitCategory() {
[parameter(ParameterSetName='Get with ID')]
[int]$id,
[parameter(ParameterSetName='Search')]
[string]$name,
[parameter(ParameterSetName='Search')]
[ValidateSet("asc", "desc")]
[string]$order = "desc",

View file

@ -8,6 +8,9 @@ A text string to search the Companies data
.PARAMETER id
A id of specific Company
.PARAMETER name
Optionally restrict company results to this company name.
.PARAMETER limit
Specify the number of results you wish to return. Defaults to 50. Defines batch size for -all
@ -41,6 +44,9 @@ function Get-SnipeitCompany() {
[parameter(ParameterSetName='Get with ID')]
[int]$id,
[parameter(ParameterSetName='Search')]
[string]$name,
[parameter(ParameterSetName='Search')]
[ValidateSet("asc", "desc")]
[string]$order = "desc",

View file

@ -8,6 +8,18 @@ A text string to search the Components data
.PARAMETER id
A id of specific Component
.PARAMETER name
Optionally restrict Component results to this name field
.PARAMETER company_id
Optionally restrict Component results to this company_id field
.PARAMETER category_id
Optionally restrict Component results to this category_id field
.PARAMETER location_id
Optionally restrict Component results to this location_id field
.PARAMETER limit
Specify the number of results you wish to return. Defaults to 50. Defines batch size for -all
@ -45,6 +57,9 @@ function Get-SnipeitComponent() {
[parameter(ParameterSetName='Get with ID')]
[int]$id,
[parameter(ParameterSetName='Search')]
[string]$name,
[parameter(ParameterSetName='Search')]
[int]$category_id,

View file

@ -8,6 +8,9 @@ A text string to search the consumables
.PARAMETER id
A id of specific consumable
.PARAMETER name
Optionally restrict consumable results to this name field
.PARAMETER company_id
Id number of company
@ -63,6 +66,9 @@ function Get-SnipeitConsumable() {
[parameter(ParameterSetName='Get with ID')]
[int[]]$id,
[parameter(ParameterSetName='Search')]
[string]$name,
[parameter(ParameterSetName='Search')]
[int]$category_id,

View file

@ -8,6 +8,18 @@ A text string to search the Departments data
.PARAMETER id
A id of specific Department
.PARAMETER name
Optionally restrict department results to this department name.
.PARAMETER manager_id
Optionally restrict department results to this manager ID.
.PARAMETER company_id
Optionally restrict department results to this company ID.
.PARAMETER location_id
Optionally restrict department results to this location ID.
.PARAMETER limit
Specify the number of results you wish to return. Defaults to 50. Defines batch size for -all
@ -43,6 +55,18 @@ function Get-SnipeitDepartment() {
[parameter(ParameterSetName='Get with ID')]
[int]$id,
[parameter(ParameterSetName='Search')]
[string]$name,
[parameter(ParameterSetName='Search')]
[int]$manager_id,
[parameter(ParameterSetName='Search')]
[int]$company_id,
[parameter(ParameterSetName='Search')]
[int]$location_id,
[parameter(ParameterSetName='Search')]
[ValidateSet("asc", "desc")]
[string]$order = "desc",

View file

@ -8,6 +8,24 @@ A text string to search the Locations data
.PARAMETER id
A id of specific Location
.PARAMETER name
Optionally restrict Location results to this Location name.
.PARAMETER address
Optionally restrict Location results to this Location address.
.PARAMETER address2
Optionally restrict Location results to this Location address2.
.PARAMETER city
Optionally restrict Location results to this Location city.
.PARAMETER zip
Optionally restrict Location results to this Location zip.
.PARAMETER country
Optionally restrict Location results to this Location country.
.PARAMETER limit
Specify the number of results you wish to return. Defaults to 50. Defines batch size for -all
@ -40,6 +58,24 @@ function Get-SnipeitLocation() {
[parameter(ParameterSetName='Get with ID')]
[int]$id,
[parameter(ParameterSetName='Search')]
[string]$name,
[parameter(ParameterSetName='Search')]
[string]$address,
[parameter(ParameterSetName='Search')]
[string]$address2,
[parameter(ParameterSetName='Search')]
[string]$city,
[parameter(ParameterSetName='Search')]
[string]$zip,
[parameter(ParameterSetName='Search')]
[string]$country,
[parameter(ParameterSetName='Search')]
[ValidateSet("asc", "desc")]
[string]$order = "desc",

View file

@ -8,6 +8,9 @@
.PARAMETER id
A id of specific Manufactuter
.PARAMETER name
Optionally restrict Manufacturer results to this name field
.PARAMETER limit
Specify the number of results you wish to return. Defaults to 50. Defines batch size for -all
@ -41,6 +44,9 @@ function Get-SnipeitManufacturer() {
[parameter(ParameterSetName='Get with ID')]
[int]$id,
[parameter(ParameterSetName='Search')]
[string]$name,
[parameter(ParameterSetName='Search')]
[ValidateSet("asc", "desc")]
[string]$order = "desc",

View file

@ -8,6 +8,9 @@ A text string to search the Status Labels data
.PARAMETER id
A id of specific Status Label
.PARAMETER name
Optionally restrict Status Label results to this name field
.PARAMETER limit
Specify the number of results you wish to return. Defaults to 50. Defines batch size for -all
@ -40,6 +43,9 @@ function Get-SnipeitStatus() {
[parameter(ParameterSetName='Get with ID')]
[int]$id,
[parameter(ParameterSetName='Search')]
[string]$name,
[parameter(ParameterSetName='Search')]
[ValidateSet("asc", "desc")]
[string]$order = "desc",

View file

@ -8,6 +8,33 @@ A text string to search the Supliers data
.PARAMETER id
A id of specific Suplier
.PARAMETER name
Optionally restrict Supplier results to this Supplier name.
.PARAMETER address
Optionally restrict Supplier results to this Supplier address.
.PARAMETER address2
Optionally restrict Supplier results to this Supplier address2.
.PARAMETER city
Optionally restrict Supplier results to this Supplier city.
.PARAMETER zip
Optionally restrict Supplier results to this Supplier zip.
.PARAMETER country
Optionally restrict Supplier results to this Supplier country.
.PARAMETER fax
Optionally restrict Supplier results to this Supplier fax number.
.PARAMETER email
Optionally restrict Supplier results to this Supplier email address.
.PARAMETER notes
Optionally restrict Supplier results to this Supplier notes field.
.PARAMETER limit
Specify the number of results you wish to return. Defaults to 50. Defines batch size for -all
@ -43,6 +70,33 @@ function Get-SnipeitSupplier() {
[ValidateSet("asc", "desc")]
[string]$order = "desc",
[parameter(ParameterSetName='Search')]
[string]$name,
[parameter(ParameterSetName='Search')]
[string]$address,
[parameter(ParameterSetName='Search')]
[string]$address2,
[parameter(ParameterSetName='Search')]
[string]$city,
[parameter(ParameterSetName='Search')]
[string]$zip,
[parameter(ParameterSetName='Search')]
[string]$country,
[parameter(ParameterSetName='Search')]
[string]$fax,
[parameter(ParameterSetName='Search')]
[string]$email,
[parameter(ParameterSetName='Search')]
[string]$notes,
[parameter(ParameterSetName='Search')]
[int]$limit = 50,

View file

@ -8,11 +8,56 @@ A text string to search the User data
.PARAMETER id
A id of specific User
.PARAMETER accessory_id
Get users a specific accessory id has been checked out to
.PARAMETER username
Search string for username field
Optionally restrict User results to this username field
.PARAMETER email
Search string for email field
Optionally restrict User results to this email field
.PARAMETER employee_num
Optionally restrict User results to this employee_num field
.PARAMETER state
Optionally restrict User results to this state field
.PARAMETER country
Optionally restrict User results to this country field
.PARAMETER zip
Optionally restrict User results to this zip field
.PARAMETER company_id
Optionally restrict User results to this company_id field
.PARAMETER location_id
Optionally restrict User results to this location_id field
.PARAMETER department_id
Optionally restrict User results to this department_id field
.PARAMETER deleted
Optionally restrict User results to deleted users only
.PARAMETER ldap_import
Optionally restrict User results to those with specified ldap_import value
.PARAMETER remote
Optionally restrict User results to those with specified remote worker value
.PARAMETER assets_count
Optionally restrict User results to those with the specified assets count
.PARAMETER licenses_count
Optionally restrict User results to those with the specified licenses count
.PARAMETER accessories_count
Optionally restrict User results to those with the specified accessories count
.PARAMETER consumables_count
Optionally restrict User results to those with the specified consumables count
.PARAMETER limit
Specify the number of results you wish to return. Defaults to 50. Defines batch size for -all
@ -75,7 +120,40 @@ function Get-SnipeitUser() {
[parameter(ParameterSetName='Search')]
[string]$email,
[parameter(ParameterSetName='Search')]
[string]$employee_num,
[parameter(ParameterSetName='Search')]
[string]$state,
[parameter(ParameterSetName='Search')]
[string]$zip,
[parameter(ParameterSetName='Search')]
[string]$country,
[parameter(ParameterSetName='Search')]
[Nullable[bool]]$deleted,
[parameter(ParameterSetName='Search')]
[Nullable[bool]]$ldap_import,
[parameter(ParameterSetName='Search')]
[Nullable[bool]]$remote,
[parameter(ParameterSetName='Search')]
[int]$assets_count,
[parameter(ParameterSetName='Search')]
[int]$licenses_count,
[parameter(ParameterSetName='Search')]
[int]$accessories_count,
[parameter(ParameterSetName='Search')]
[int]$consumables_count,
[parameter(ParameterSetName='Search')]
[ValidateSet("asc", "desc")]
[string]$order = "desc",

View file

@ -44,6 +44,9 @@
.PARAMETER manager_id
ID number of manager
.PARAMETER groups
ID numbers of groups
.PARAMETER employee_num
Employeenumber
@ -103,6 +106,8 @@ function New-SnipeitUser() {
[int]$manager_id,
[int[]]$groups,
[string]$employee_num,
[bool]$ldap_import = $false,

View file

@ -47,6 +47,9 @@
.PARAMETER manager_id
ID number of manager
.PARAMETER groups
ID numbers of groups
.PARAMETER employee_num
Employeenumber
@ -110,6 +113,8 @@ function Set-SnipeitUser() {
[Nullable[System.Int32]]$manager_id,
[int[]]$groups,
[string]$employee_num,
[bool]$activated,