Подавить папку не существует - PullRequest
0 голосов
/ 05 декабря 2018

Этот вопрос является частью большого скрипта, который работает как задумано.Проблема в том, что скрипт не работает, если одна из папок отсутствует.Я пробовал разные if операторы, но это вне моих знаний.

2 вопроса:

  1. Как я могу подавить папки, которые отсутствуют в скрипте, чтобы он не перестал работать?
  2. Как получить отдельный файл журнала с отсутствующими папками?

Это скрипт:

Param (
    [parameter(Mandatory=$false)]
    [String[]]$IncludeFolders = @("Desktop", "Documents", "Pictures", "Videos", "Favorites")
)

#$IncludeFolders 
foreach ($IncludeFolder in $IncludeFolders) {
    & psexec ("\\" + $ServerUsersHome) -s -u $ServerUsersHomeUsername -p $ServerUsersHomePassword -w $ServerUsersHomeTempPath robocopy ($ServerUsersHomeFromPath + "\" + $IncludeFolder) ($ServerUsersHomeToPath + "\" + $IncludeFolder) $IncludeFiles /S /COPY:DAT /DCOPY:T /R:2 /W:5 /V /TEE ("/LOG+:" + $robocopylogfilename)
    Write-Log ("Remote executed robocopy completed. Exit code " + $LastExitCode) 5
} #IncludeFolders

1 Ответ

0 голосов
/ 05 декабря 2018

В1: Выполнение этого в имеющемся коде сделает командную строку настолько запутанной, что даже не стоит пытаться.Попробуйте использовать Invoke-Command для запуска цикла на удаленном хосте и используйте Test-Path для проверки существования пути.

$pw = ConvertTo-SecureString $ServerUsersHomePassword -AsPlainText -Force
$cred = New-Object Management.Automation.PSCredential $ServerUsersHomeUsername, $pw

Invoke-Command -Computer $ServerUsersHome -ScriptBlock {
    Set-Location $using:ServerUsersHomeTempPath
    foreach ($IncludeFolder in $using:IncludeFolders) {
        $src = "${using:ServerUsersHomeFromPath}\${IncludeFolder}"
        if (Test-Path $src -Container) {
            & robocopy $src $using:IncludeFiles /S /COPY:DAT /DCOPY:T /R:2 /W:5 /V /TEE "/LOG+:${using:robocopylogfilename}"
        }
    }
} -Credential $cred

Q2: добавьте ветвь else в оператор if вКод выше, где вы пишете информацию в другой файл.

if (Test-Path $src -Container) {
    robocopy ...
} else {
    "Missing folder: ${src}" | Add-Content 'C:\path\to\missing_folders.log'
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...