Public/Get-ePOwerShellMneRecoveryKey.ps1
<# .SYNOPSIS Returns the MNE Recovery Key for specified encrypted systems .DESCRIPTION Returns the MNE Recovery Key for specified encrypted systems. If no key is found, throws a warning .PARAMETER LeafNodeId Specifies the unique Leaf Node ID for each individual computer .PARAMETER SerialNumber Specifies the unique Serial Number for each individual computer .EXAMPLE Get-ePOwerShellMneRecoveryKey '12345' .EXAMPLE Get-ePOwerShellMneRecoveryKey -SerialNumber 'C035406KHV5K' #> function Get-ePOwerShellMneRecoveryKey { [CmdletBinding(DefaultParametersetname = 'ComputerName')] [Alias('Get-ePOMneRecoveryKey')] [OutputType([String])] param ( [Parameter(Mandatory = $True, ParameterSetName = 'ComputerName', Position = 0, ValueFromPipeline = $True, ValueFromPipelineByPropertyName = $True)] [Alias('Name')] [String[]] $ComputerName, [Parameter(Mandatory = $True, ParameterSetName = 'LeafNode')] [String[]] $LeafNodeId, [Parameter(Mandatory = $True, ParameterSetName = 'SerialNumber')] [String[]] $SerialNumber ) begin { $TableName = 'RecoveryKeys' $Table = New-Object System.Data.DataTable $TableName } process { switch ($PSCmdlet.ParameterSetName) { 'ComputerName' { if (-not ($Table.Columns | ? { $_.ColumnName -eq 'ComputerName' })) { $Column1 = New-Object System.Data.DataColumn 'ComputerName', ([String]) [void]$Table.Columns.Add($Column1) } if (-not ($Table.Columns | ? { $_.ColumnName -eq 'RecoveryKey' })) { $Column2 = New-Object System.Data.DataColumn 'RecoveryKey', ([String]) [void]$Table.Columns.Add($Column2) } foreach ($Computer in $ComputerName) { try { $ComputerInformation = Find-ePOwerShellComputerSystem -ComputerName $Computer } catch { Write-Warning ('Failed to find comptuer system in ePO: {0}' -f $Computer) continue } $Request = @{ Name = 'mne.recoverMachine' PassThru = $True Query = @{ epoLeafNodeId = $ComputerInformation.ParentID } } try { $Key = Invoke-ePOwerShellRequest @Request } catch { Write-Warning ('Failed to find detect recovery key for computer: {0}' -f $ComputerInformation.ComputerName) continue } $Row = $Table.NewRow() $Row.ComputerName = $ComputerInformation.ComputerName $Row.RecoveryKey = $Key [void]$Table.Rows.Add($Row) } } 'LeafNode' { # if (-not ($Table.Columns | ? { $_.ColumnName -eq 'LeafNode' })) { $Column1 = New-Object System.Data.DataColumn 'LeafNode', ([String]) [void]$Table.Columns.Add($Column1) # } # if (-not ($Table.Columns | ? { $_.ColumnName -eq 'RecoveryKey' })) { $Column2 = New-Object System.Data.DataColumn 'RecoveryKey', ([String]) [void]$Table.Columns.Add($Column2) # } foreach ($LeafNode in $LeafNodeId) { $Request = @{ Name = 'mne.recoverMachine' PassThru = $True Query = @{ epoLeafNodeId = $LeafNode } } try { $Key = Invoke-ePOwerShellRequest @Request } catch { Throw "Failed to find detect recovery key: $($_.Exception.Message)" } $Row = $Table.NewRow() $Row.LeafNode = $LeafNode $Row.RecoveryKey = $Key [void]$Table.Rows.Add($Row) } } 'SerialNumber' { # if (-not ($Table.Columns | ? { $_.ColumnName -eq 'SerialNumber' })) { $Column1 = New-Object System.Data.DataColumn 'SerialNumber', ([String]) [void]$Table.Columns.Add($Column1) # } # if (-not ($Table.Columns | ? { $_.ColumnName -eq 'RecoveryKey' })) { $Column2 = New-Object System.Data.DataColumn 'RecoveryKey', ([String]) [void]$Table.Columns.Add($Column2) # } foreach ($SN in $SerialNumber) { $Request = @{ Name = 'mne.recoverMachine' PassThru = $True Query = @{ serialNumber = $SN } } try { $Key = Invoke-ePOwerShellRequest @Request } catch { Throw "Failed to find detect recovery key: $($_.Exception.Message)" } $Row = $Table.NewRow() $Row.SerialNumber = $SN $Row.RecoveryKey = $Key [void]$Table.Rows.Add($Row) } } } } end { return $Table } } |