scripts/AssetTag.ps1
<# 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:\> Get-iBMCAssetTag -Session $session 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 return Copy-ObjectProperties $Response @('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 { } } |