Автор: chyngyz.aliev

  • Создание задач по репликации Veeam B&R с помощью Powershell

    Мне довелось создать реплику виртуальных машин средствами Veeam B&R. Забавно то что используя GUI это делается за пару кликов, однако задача состояла в том что бы создать реплики на более чем 15 машин при этом каждая машина должна быть отдельной джобой. Что бы не терять большое количество времени, я решил написать небольшой скрипт на Powershell который сделает это за меня. Я постарался максимально унифицировать этот скриптик, но думаю можно будет сделать это еще эффективнее. Тело скрипта под катом.

    Тыкни
    function New-ReplicaJob {
        param (
            [string]$JobName, 
            [string]$TargetServerIP, 
            [string]$VMName, 
            [string]$TargetDatastore,
            [string]$SourceIP, 
            [string]$SourceMask, 
            [string]$ReIpTargetIP, 
            [string]$ReIpTargetMask,
            [string]$ReIpGateway, 
            [string]$ReIpDNS, 
            [string]$SourceNetwork, 
            [string]$TargetNetwork,
            [string]$SourceProxy, 
            [string]$TargetProxy, 
            [string]$Repository = "DefaultRepo"
        )
    
        $Description = "$JobName replication job"
        $RestorePointsToKeep = 7
    
        $TargetServer = Get-VBRServer -Name    $TargetServerIP
        $VMObject = Find-VBRViEntity -Name $VMName
        $Datastore = Find-VBRViDatastore -Name $TargetDatastore -Server $TargetServerIP
        $ReIpRule = New-VBRViReplicaReIpRule -SourceIp $SourceIP -SourceMask $SourceMask -TargetIp $ReIpTargetIP -TargetMask $ReIpTargetMask -TargetGateway $ReIpGateway -DNS $ReIpDNS
    
        $SrcNetwork = Get-VBRViServerNetworkInfo -Server $VMObject.VmHostName | Where-Object { $_.Name -eq $SourceNetwork }
        $TgtNetwork = Get-VBRViServerNetworkInfo -Server $TargetServer.Name | Where-Object { $_.Name -eq $TargetNetwork }
    
        $SrcProxy = Get-VBRViProxy -Name $SourceProxy
        $TgtProxy = Get-VBRViProxy -Name $TargetProxy
    
        Add-VBRViReplicaJob -Name $JobName `
                            -Server $TargetServer `
                            -Entity $VMObject `
                            -Datastore $Datastore `
                            -Suffix "_replica" `
                            -BackupRepository $Repository `
                            -Description $Description `
                            -EnableNetworkMapping `
                            -SourceNetwork $SrcNetwork `
                            -TargetNetwork $TgtNetwork `
                            -SourceProxy $SrcProxy `
                            -TargetProxy $TgtProxy `
                            -RestorePointsToKeep $RestorePointsToKeep `
                            -ReIpRule $ReIpRule `
                            -HighPriority `
                            -Force
    }
    
    Connect-VIServer "$(Read-Host 'Enter vCenter hostname or IP')" -Credential (Get-Credential)
    Connect-VBRServer -Server "$(Read-Host 'Enter Veeam hostname or IP')" -Credential (Get-Credential)
    
    $VMList = @(
    "$(Read-Host 'Enter VM names to replicate, separated by comma (no spaces)')".Split(",") | Where-Object { $_ -ne '' }
    )
    
    foreach ($VM in $VMList) {
        $GuestIP = (Get-VM $VM).Guest.IPAddress[0]
        $GuestNet = (Get-VM $VM).Guest.Nics.NetworkName[0]
        $LastOctet = $GuestIP.Split(".")[-1]
        $NewTargetIP = "192.168.100.$LastOctet"
        $NewGateway = "192.168.100.1"
    
        New-ReplicaJob -JobName $VM `
                       -TargetServerIP "192.168.0.10" `
                       -VMName $VM `
                       -TargetDatastore "TargetDatastore" `
                       -SourceIP $GuestIP `
                       -SourceMask "255.255.255.0" `
                       -ReIpTargetIP $NewTargetIP `
                       -ReIpTargetMask "255.255.255.0" `
                       -ReIpGateway $NewGateway `
                       -ReIpDNS "192.168.100.10" `
                       -SourceNetwork $GuestNet `
                       -TargetNetwork "TargetNetworkName" `
                       -SourceProxy "SourceProxyName" `
                       -TargetProxy "TargetProxyName" `
                       -Repository "DefaultRepo"
    }
    
  • Проблемы с IE?

    Недавно я столкнулся с острой необходимостью прямой работы с IE на Windows 11. Однако, я столкнулся с тем что просто режим совместимости в EDGE совершенно недостаточно. Немного поразмышляв, я пришел к выводу что ничто так не симулирует стабильную работу IE как сам IE. На просторах Интернета я нашел довольно забавный и рабочий метод открытия IE несмотря на все заявления мелкомягких о том что IE выпилен. Ниже пример скрипта на Powershell. В моем решении я скомпилировал нижеследующий скрипт в EXE файл с помощью Invoke-PS2EXE и использую в своих целях.

    Тыкни
    $vbsFilePath = "$env:APPDATA\ie.vbs"
    $vbsContent = @'
    Set objIE = CreateObject("InternetExplorer.Application")
    objIE.Navigate "https://любой.произвольный.сайт"
    objIE.Visible = 1
    '@
    Set-Content -Path $vbsFilePath -Value $vbsContent
    Start-Process "wscript.exe" -ArgumentList $vbsFilePath
    Start-Sleep -Seconds 10
    Remove-Item $vbsFilePath