В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'
}