scripts/AssetTag.ps1
# Copyright (C) 2020 Huawei Technologies Co., Ltd. All rights reserved. # This program is free software; you can redistribute it and/or modify # it under the terms of the MIT License # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # MIT License for more detail <# NOTE: iBMC AssetTag module Cmdlets #> function Get-iBMCAssetTag { <# .SYNOPSIS Get iBMC Asset Tag. .DESCRIPTION Get iBMC Asset Tag. .PARAMETER Session iBMC redfish session object which is created by Connect-iBMC cmdlet. A session object identifies an iBMC server to which this cmdlet will be executed. .OUTPUTS String Returns iBMC Asset Tag if cmdlet executes successfully. In case of an error or warning, exception will be returned. .EXAMPLE PS C:\> $credential = Get-Credential PS C:\> $session = Connect-iBMC -Address 10.1.1.2 -Credential $credential -TrustCert PS C:\> $AssetTag = Get-iBMCAssetTag -Session $session PS C:\> $AssetTag | fl Host : 10.1.1.2 AssetTag : powershell-asset-tag .LINK https://github.com/Huawei/Huawei-iBMC-Cmdlets Set-iBMCAssetTag Connect-iBMC Disconnect-iBMC #> [CmdletBinding()] param ( [RedfishSession[]] [parameter(Mandatory = $true, ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true, Position = 0)] $Session ) begin { } process { Assert-ArrayNotNull $Session 'Session' $Logger.info("Invoke Get iBMC AssetTag function") $ScriptBlock = { param($RedfishSession) $(Get-Logger).info($(Trace-Session $RedfishSession "Invoke Get iBMC Asset Tag now")) $Path = "/Systems/$($RedfishSession.Id)" $Response = Invoke-RedfishRequest $RedfishSession $Path | ConvertFrom-WebResponse $AssetTag = Copy-ObjectProperties $Response @('AssetTag') return $(Update-SessionAddress $RedfishSession $AssetTag) } try { $tasks = New-Object System.Collections.ArrayList $pool = New-RunspacePool $Session.Count for ($idx = 0; $idx -lt $Session.Count; $idx++) { $RedfishSession = $Session[$idx] $Logger.info($(Trace-Session $RedfishSession "Submit Get iBMC Asset Tag task")) [Void] $tasks.Add($(Start-ScriptBlockThread $pool $ScriptBlock @($RedfishSession))) } $Results = Get-AsyncTaskResults $tasks return ,$Results } finally { Close-Pool $pool } } end { } } function Set-iBMCAssetTag { <# .SYNOPSIS Modify iBMC Asset Tag. .DESCRIPTION Modify iBMC Asset Tag. .PARAMETER Session iBMC redfish session object which is created by Connect-iBMC cmdlet. A session object identifies an iBMC server to which this cmdlet will be executed. .PARAMETER AssetTag Indicates the asset tag A character string that meets the following requirements: - a string of 1 to 48 characters. - an empty string if u want to set asset tag to null .OUTPUTS Null Returns Null if cmdlet executes successfully. In case of an error or warning, exception will be returned. .EXAMPLE PS C:\> $credential = Get-Credential PS C:\> $session = Connect-iBMC -Address 10.1.1.2 -Credential $credential -TrustCert PS C:\> Set-iBMCAssetTag $session -AssetTag 'powershell-asset-tag' Set Asset Tag to 'powershell-asset-tag' example .EXAMPLE PS C:\> $credential = Get-Credential PS C:\> $session = Connect-iBMC -Address 10.1.1.2 -Credential $credential -TrustCert PS C:\> Set-iBMCAssetTag $session -AssetTag '' Set Asset Tag to null example .LINK https://github.com/Huawei/Huawei-iBMC-Cmdlets Get-iBMCAssetTag Connect-iBMC Disconnect-iBMC #> [CmdletBinding()] param ( [RedfishSession[]] [parameter(Mandatory = $true, ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true, Position = 0)] $Session, [String[]] [ValidateLength(0, 48)] [parameter(Mandatory = $false, ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true, Position = 1)] $AssetTag ) begin { } process { Assert-ArrayNotNull $Session 'Session' $AssetTagList = Get-OptionalMatchedSizeArray $Session $AssetTag $Logger.info("Invoke Set iBMC Asset Tag function") $ScriptBlock = { param($RedfishSession, $Payload) $(Get-Logger).info($(Trace-Session $RedfishSession "Invoke Set iBMC Asset Tag now")) $Path = "/Systems/$($RedfishSession.Id)" $Logger.info($(Trace-Session $RedfishSession "Sending payload: $($Payload | ConvertTo-Json -Depth 5)")) $Response = Invoke-RedfishRequest $RedfishSession $Path 'Patch' $Payload Resolve-RedfishPartialSuccessResponse $RedfishSession $Response | Out-Null return $null } try { $tasks = New-Object System.Collections.ArrayList $pool = New-RunspacePool $Session.Count for ($idx = 0; $idx -lt $Session.Count; $idx++) { $RedfishSession = $Session[$idx] $Payload = @{ AssetTag=$AssetTagList[$idx]; } if ($Payload.AssetTag -eq '') { $Payload.AssetTag = $null } $Parameters = @($RedfishSession, $Payload) $Logger.info($(Trace-Session $RedfishSession "Submit Set iBMC Asset Tag task")) [Void] $tasks.Add($(Start-ScriptBlockThread $pool $ScriptBlock $Parameters)) } $Results = Get-AsyncTaskResults $tasks return ,$Results } finally { Close-Pool $pool } } end { } } |