как объединить несколько скриптов и использовать функции, чтобы показать вывод - PullRequest
3 голосов
/ 10 августа 2011

Несколько из вас (особенно Шей!) Помогли мне вчера, и мне удалось придумать несколько сценариев, и теперь я объединяю их в один.

Проблема в том, что я поместил их все в «Функции», и одна функция полагается на успешную проверку исправления - если исправление не установлено, то сценарий должен тут же остановиться - это первая проверка скрипт делает. Как получить следующую функцию для вызова успешного вывода функции исправления?

Кроме того, я понятия не имею, как вызывать функции - то есть внизу я помещаю имена функций на одну строку друг за другом, но в конечном итоге зацикливаюсь снова и снова!

надеюсь, что кто-то может помочь.

Write-Host "=================================="
Write-Host "Pre-Staging Script for DFSR Server"
Write-Host "=================================="

Function Service
{
    Write-Host "=================================="
    Write-Host "Checking Service Installation"
    Write-Host "=================================="

    write-host "This will check if Hotfix KB979808 is installed." -ForegroundColor Black -BackgroundColor Cyan
    write-host "This is required for Windows Server 2008 R2 Robocopying"  -ForegroundColor Black -BackgroundColor Cyan
    Write-Host ""

    $hotfix1 = Get-HotFix -id KB979808 -ErrorAction SilentlyContinue

        If($hotfix1)
        {
            Write-Host "Hotfix is installed you may proceed" -foregroundcolor "green"
            Write-Host ""
        }
    else
        {
        Write-Host "Hotfix is NOT installed - Please ensure you install this hotfix BEFORE" -ForegroundColor "red"
        Write-host "Copying any data" -foregroundcolor "red"
        Write-Host ""
        }
}

Function Robocopy ($hotfix1)
 {
    Write-Host "============="
    Write-Host "Robocopy Data" 
    Write-Host "============="

    $Source = Read-Host "Please enter path of SOURCE"
    $Destination = Read-Host "Please enter path of TARGET"

    $Output = Read-Host "Please enter where to place output file eg c:\temp\COPY.log"

    robocopy $Source $Target /b /e /copyall /r:1 /xd dfsrprivate /log:$Output /tee
 }

Function Comparision
{
    Write-Host "==============================================="
    Write-Host "Checking Directory Count and Folder comparision" -ErrorAction SilentlyContinue -BackgroundColor Cyan -ForegroundColor Black
    Write-Host "==============================================="
    Write-Host ""

    $Source = Read-Host "Please enter Source directory to check"
    $Target = Read-Host "Please enter Target directory to check"
    Write-Host ""
    If($source -and (Test-Path -Path $source -PathType Container))
    {
        "There are $(@(Get-ChildItem $Source).Count) items in the '$Source' directory"  
    }
    Else
    {
        Write-Host "Please enter a directory"
        }
        If($source -and (Test-Path -Path $Target -PathType Container))
        {
            "There are $(@(Get-ChildItem $Target).Count) items in the '$Target' directory"  
    }
    Else
    {
        Write-Host "Please enter a directory"
    }

    Write-Host ""
    $child1 = Get-ChildItem -Path $Source -Recurse -Force
    $child2 = Get-ChildItem -Path $Target -Recurse -Force

    Compare-Object $child1 -DifferenceObject $child2 -Property Name

    Write-Host ""
    Write-Host "NOTE:" -BackgroundColor Cyan -ForegroundColor Black
    Write-Host "Any symbols with '=>' mean that the file Does NOT exist in SOURCE but is in the Target" -BackgroundColor Cyan -ForegroundColor Black
    Write-Host "Any symbols with '<=' mean that the file Does NOT exist in TARGET but is in the Source" -BackgroundColor Cyan -ForegroundColor Black
}

1 Ответ

4 голосов
/ 10 августа 2011

Чтобы использовать исправление, найденное в функции Service, необходимо вернуть исправление в переменную.Функция будет выглядеть следующим образом:

Function Service
{
    Write-Host "=================================="
    Write-Host "Checking Service Installation"
    Write-Host "=================================="

    write-host "This will check if Hotfix KB979808 is installed." -ForegroundColor Black -BackgroundColor Cyan
    write-host "This is required for Windows Server 2008 R2 Robocopying"  -ForegroundColor Black -BackgroundColor Cyan
    Write-Host ""

    # This will return any output.
    Get-HotFix -id KB979808 -ErrorAction SilentlyContinue

}

Тогда вызовы функции будут такими:

$hotfix = Service
if($hotfix) {
    Robocopy
}
else {
    # This will exit the script.
    return
}

Функция Robocopy не нуждается в $hotfix1 в качестве параметра, поскольку она не используетсяв любом месте функции.

Функция Robocopy, вероятно, находится в цикле, поскольку вызов robocopy.exe такой же, как и у вашей функции Robocopy;попробуйте добавить ".exe" в вызов robocopy.exe.Важно назвать функции, чтобы точно отражать их назначение.Service может быть Get-HotFixKB979808 и Robocopy может быть Start-MyRobocopy

Сказав все это, поскольку ваши функции выполняют очень специфические функции, они действительно не должны быть их собственными функциями.Вы можете изменить их, чтобы они были более пригодны для повторного использования, если они будут принимать параметры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...