查找 Net-backup 故障代码及其各自的消息

Find Net-backup failure code and it's respective messages

我有一个名为 NetBackupPS.psm1 的 powershell 模块,它只有 0-255 范围的状态代码和网络备份作业的相应消息。我需要网络备份作业中的所有状态代码及其各自的消息。然后只有我可以使用我的 powershell 脚本获取所有错误消息并将其报告给我的客户。

我正在使用的 NetBackupPS 模块:

https://github.com/lazywinadmin/NetBackupPS/blob/master/NetBackupPS.psm1


我的脚本:

    $server = xxxxxxxxxxx
    $Username = YYYYYYYYYY
    $password=zzzzzzzzzzzz
    $secpasswd = ConvertTo-SecureString $password -AsPlainText -Force
    $mycreds = New-Object System.Management.Automation.PSCredential -ArgumentList $Username,$secpasswd
    
    $netbackupfailed=Invoke-Command -ComputerName $server -Credential $mycreds -ScriptBlock {
    
    Import-Module "C:\Program Files\WindowsPowerShell\Modules\NetBackupPS.psm1"
    $full= Get-NetBackupJob -Full|?{$_.status -ne ""}
    $failed=$full|select ID,jobid,jobtype,status,@{n='fail';e={Get-NetBackupStatusCode -StatusCode ($_.status)}},schedule,client,@{n='Started';e={((Get-Date 01.01.1970)+([System.TimeSpan]::fromseconds(($_.started - 18000)))).ToString('yyy-MM-dd HH:mm:ss')}},@{n='Ended';e={((Get-Date 01.01.1970)+([System.TimeSpan]::fromseconds(($_.ended -18000)))).ToString('yyy-MM-dd HH:mm:ss')}},schedule_type
$failed
}

$netbackupfailed

上面的代码returns出错了

@{n='fail';e={Get-NetBackupStatusCode -StatusCode ($_.status)}}

行。因为在 NetBackupPS 模块中只包含 255 个错误代码及其各自的消息。如果状态代码大于 255,则会给出类似

的错误
greater than maximum range

我需要一个解决方案来获取所有错误代码的错误消息。

我不是 NetBackup 方面的专家,但有几点需要指出。首先要获得对您问题的最佳回答,请尝试格式化您的代码以提高可读性。我在更改以下几个小项目时冒昧地这样做:

$server = xxxxxxxxxxx
$Username = YYYYYYYYYY
$password=zzzzzzzzzzzz
$secpasswd = ConvertTo-SecureString $password -AsPlainText -Force
$mycreds = New-Object System.Management.Automation.PSCredential -ArgumentList $Username,$secpasswd

$ScriptBlock =
{
    Import-Module "C:\Program Files\WindowsPowerShell\Modules\NetBackupPS.psm1"

    $full= Get-NetBackupJob -Full |
    Where-Object{ $_.status -ne "" }

    $failed = $full | 
    Select-Object ID, jobid, jobtype, status,
        @{n = 'fail'; e = { Get-NetBackupStatusCode -StatusCode $_.status } },
        schedule, client,
        @{n = 'Started'; e = { ( (Get-Date 01.01.1970) + ( New-TimeSpan -Seconds ($_.started - 18000) )).ToString('yyy-MM-dd HH:mm:ss') } },
        @{n = 'Ended'; e = { ( (Get-Date 01.01.1970) + ( New-TimeSpan -Seconds ($_.ended -18000) )).ToString('yyy-MM-dd HH:mm:ss') } },
        schedule_type
    $failed
}

$netbackupfailed = Invoke-Command -ComputerName $server -Credential $mycreds -ScriptBlock $ScriptBlock

$netbackupfailed

Note: I only did this to help me read it.

现在在 NetBackupPS.psm1 的第 1230 - 1236 行,您会发现:

param (
    [parameter(Mandatory = $true,
               HelpMessage = "Enter status code number (ex: 15) ",
               ValueFromPipelineByPropertyName = $true,
               Position = 0)]
    [ValidateRange(0, 255)]
    [int]$StatusCode

您可以尝试修改允许范围!

现在在第 1241 - 1497 行,您会发现一个很长的 switch 语句,它似乎定义了每个状态代码的文本。您可能想在此处添加您期望的状态代码,并确保它们在您之前重新定义的范围内。

免责声明:我强烈建议您联系该模块的作者。我不会轻率地修改别人的代码,你永远不知道代码中的东西是如何协同工作的。我所说的一切都是基于对 .psm1 文件代码的有限审查。此外,如果您有来自 NetBackup 的合法状态代码,但设计者未提供 he/she 可能需要更新他们的工作等...

更新

我还发现 this,看起来像是使用 NEtBackup Rest API 构建的编译 C# cmdlet 的较新模块。无论您是否用于此项目,都可能值得一试。