Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 检查是否备份了某些虚拟机_Powershell_Veeam - Fatal编程技术网

Powershell 检查是否备份了某些虚拟机

Powershell 检查是否备份了某些虚拟机,powershell,veeam,Powershell,Veeam,我正在寻找一种方法来检查虚拟机列表是否有备份以及状态如何。 我设法获得了VM备份的状态,但是如果在$tasks中找不到VM,我不会得到错误。 我需要知道$tasks中是否没有虚拟机,以便知道没有为此虚拟机配置备份。 到目前为止,剧本还没有完成 Write-Host "Enter Backup Server" -ForegroundColor cyan $h = read-host -Prompt 'Hostname' Write-Host "

我正在寻找一种方法来检查虚拟机列表是否有备份以及状态如何。 我设法获得了VM备份的状态,但是如果在$tasks中找不到VM,我不会得到错误。 我需要知道$tasks中是否没有虚拟机,以便知道没有为此虚拟机配置备份。 到目前为止,剧本还没有完成

    Write-Host "Enter Backup Server" -ForegroundColor cyan
 

 
$h = read-host -Prompt 'Hostname'


Write-Host " "
write-host "Hostname--------Job-------------Status " -ForegroundColor Cyan
Foreach ($i in $Hostname) {
Invoke-Command -ComputerName $h -ScriptBlock {
Add-PSSnapin VeeamPSSnapin

 foreach($Job in (Get-VBRJob))
{
        $Session = $Job.FindLastSession()
        if(!$Session){continue;}
        $Tasks = $Session.GetTaskSessions()
        $Tasks | ?{$_.Name -eq $using:i} | %{write-host $_.Name ":",$_.JobName,"===>"$_.Status}
        
}}
}
提前谢谢


Valeri

您就快到了,您只需要统一exit子句,这样无论VM是否有备份,它都会输出类似的内容。然后,当您针对一个VM列表运行时,一个或两个VM没有备份,它们将以合理的方式显示在输出中

Foreach ($i in $Hostname) {
    Invoke-Command -ComputerName $h -ScriptBlock {
        Add-PSSnapin VeeamPSSnapin

        foreach($Job in (Get-VBRJob))
        {
                $Session = $Job.FindLastSession()
                if(!$Session){
                    [pscustomObject]@{
                        computerName = $_.Name;
                        backupStatus = "Not backed up!";
                        jobs = $null;
                    }
                $Tasks = $Session.GetTaskSessions()
                $jobs = $Tasks | ?{  $_.Name -eq $using:i } | Select -ExpandProperty JobName
                
                [PSCustomObject]@{
                    computerName = $_.Name;
                    backupStatus = "Backed up";
                    jobs = ($jobs -join ",")
                }
        }
    }
}
通过一些小的调整,如果一台机器对
$Session
没有任何结果,我们现在会返回一个对象,但是现在也会为启用了备份的机器返回一个类似的对象

您可能需要将代码调整到您想要的结果,因为我没有Veeam可用,我无法确定您想要什么,但这应该可以让您继续


作为一种额外福利,拿回PowrShell对象更容易操作。您可以将它们保存在json文件或csv中,或者在非工作时间自动运行此操作并在以后查看结果,所有这些都比使用
Write Host
命令容易得多。

我通过将所有备份的虚拟机与我列表中的虚拟机进行比较,实现了我的目标:

Write-host "Unprotected VMs (No backup)" -ForegroundColor RED
Write-host "---------------------------" -ForegroundColor RED
invoke-command -computername $h -ScriptBlock {
Add-PSSnapin VeeamPSSnapin
$backup=Get-VBRBackupSession | Where-Object {$_.JobType -eq "Backup" -or $_.JobType -eq "Replica" -and $_.EndTime}|foreach{$_.gettasksessions() | Where-Object {$_.Status -ne "Failed"}} |foreach{$_.Name} | Sort-Object | Get-Unique
$diff=Compare-Object $using:hostname $backup| ? { $_.SideIndicator -eq "<=" } | Select -ExpandProperty InputObject
$diff
写入主机“未受保护的虚拟机(无备份)”-ForegroundColor红色
写入主机“-------------------------------”ForegroundColor红色
调用命令-computername$h-ScriptBlock{
将PSSnapin添加到管理单元
$backup=Get VBRBackupSession |其中对象{$$\.JobType-eq“backup”-或$\.JobType-eq“Replica”-和$\.EndTime}foreach{$\.gettaskssessions()|其中对象{$\.Status-ne“Failed”}foreach{$\.Name}排序对象|获取唯一

$diff=Compare Object$,使用:hostname$backup |?{$\.SideIndicator-eq"如何将任何内容传递给
$Hostname
变量?从.txt文件获取内容。该文件包含新行中的每个主机名。您好,FoxDeploy!非常感谢您的帮助。不幸的是,我仍然有点卡住。我无法获取pscustomeobject的内容。我已经为两个PS自定义对象创建了对象,但当我y要查看其中的内容,我没有得到任何信息。我使用:$bkp=[PSCustomObject]@{computerName=$\uU4.Name;backupStatus=“Backed up”;jobs=($jobs-join“,”)}写主机($bkp | ft | Out String)还尝试了$bkp.computername,但我也没有得到任何结果。请使用
写入输出
而不是
写入主机
,因为写入主机带格式,并且仅应在人眼查看终端时使用。写入输出也不会返回任何内容。或者,如果我可以计算备份的VM($using:I),它将被启用从我的初始脚本。因此,我可以计算所有虚拟机的数量与备份的虚拟机,并知道是否没有备份的虚拟机。不幸的是,我尝试了几种方法,但没有成功。尝试增加变量$v++您能给我一些提示吗?非常感谢!