2017-02-10 16 views
0

Я пытаюсь исправить скрипт, и кажется, что я проиграл нить здесь. Я всегда получаю результат Успеха в моем файле журнала, это отличный результат, если честно, но даже если я удалю исходную папку, у меня получится Успех :(Скрипт Powershell для резервного копирования и копирования файла TNSNames.ora в локальной папке

Я не кодер, но У меня есть некоторые функции для работы, функция, которая все еще не работает, следующая: 1- Если папка или файл источника не существует, тогда предполагается создать запись в реестре со значением Fail, поэтому SCCM будет считать его обнаружением. Метод для оценки развертывания и также записать его в файл журнала: C: \ logs \ CopyTNSNames_1.0.log

Здесь вы являетесь моим кодом и не стесняйтесь использовать его, так как он отлично работает при копировании файл из сетевого ресурса, и он создаст резервную копию с отметкой времени на нем, конечно, один раз фиксируется:

# Function 

Function writetolog ($nTxt){ 
$date = Get-Date 
$sapce = ' ' 
$log_path = 'C:\logs\' 
$log_name = $log_path + 'CopyTNSNames_1.0.log' 
if(!(Test-Path -Path $log_path)){New-Item -ItemType directory -Path $log_path} 
Add-content $log_name -value $date$sapce$nTxt 
} 
Function code_retour ($rc){ 
$date = Get-Date 
$rc_ok = 0,3010 
$Script_returnCode = 0 
$CodeDeRetour = "Return code : ",$rc 
if($rc_ok -contains $rc){ 
writetolog $CodeDeRetour 
return $rc 
}Else{ 
writetolog $CodeDeRetour 
writetolog 'The script has failed' 
writetolog '' 
writetolog "**************************" 
writetoreg ('Fail',$rc) 
exit $rc} 
} 
Function writetoreg($status){ 
$date = Get-Date 
$status_rc = 'RC = ' + $status[1] 
$regpath_MyCompany = 'hklm:software\MyCompany' 
$regpath_Tier = 'hklm:software\MyCompany\Applications' 
$regpath_App = 'hklm:software\MyCompany\Applications\CopyTNSNames_1.0' 
$regpath_DT = 'hklm:software\MyCompany\Applications\CopyTNSNames_1.0\Result' 
if(!(Test-Path $regpath_MyCompany)){New-Item -Path $regpath_MyCompany} 
if(!(Test-Path $regpath_Tier)){New-Item -Path $regpath_Tier} 
if(!(Test-Path $regpath_App)){New-Item -Path $regpath_App} 
if(!(Test-Path $regpath_DT)){New-Item -Path $regpath_DT} 
If($status[0] -eq 'Succes'){ 
$result = 'Succes' 
Set-ItemProperty -Path $regpath_DT -Name $result -Value $date} 
If($status[0] -eq 'Failure'){ 
$result = 'Failure Timestamp ' + $date 
Set-ItemProperty -Path $regpath_DT -Name $result -Value $status_rc} 
} 

cls 

    Function CopyOra 
    { 
    $PathFolder = "\\partage\ORAFiles\Source" 
    $DestinationFolder = "c:\Apps\Oracle\11.2\network\admin\" 


    if (!(test-path $DestinationFolder)) 
{ 
    New-Item $DestinationFolder -ItemType Directory 
    "$(Get-Date) : Created folder $DestinationFolder" | Out-File "C:\Logs\CopyTNSNames_1.0" -Append 
} 


$Dir = get-childitem $PathFolder | Sort-Object Time -descending 
$LOGFilesFound = $Dir | where { $_.extension -eq ".ora" } 

"$(Get-Date) : processing files: $LOGFilesFound" | Out-File "C:\Logs\CopyTNSNames_1.0" -Append 

write-host "$(Get-Date) : processing files: $LOGFilesFound" 

foreach ($LOGFile in $LOGFilesFound) 
{ 

    write-host $PathFolder\$LOGFile 

    Try 
    { 
     If (Test-Path $DestinationFolder$LOGFile) 
     { 
      "$(Get-Date) : fichier trouvé $DestinationFolder$LOGFile ... Copie de backup en cours." | Out-File "C:\Logs\CopyTNSNames_1.0" –Append 

      $now=Get-Date -format "dd-MM-yyyy HH-mm" 
      $newFileName = "$LOGFile-$now" 

      copy-item -path "$DestinationFolder$LOGFile" -destination "$DestinationFolder$newFileName" -Container -Force:$true -Recurse 

      "$(Get-Date) : $DestinationFolder$newFileName créé." | Out-File "C:\Logs\CopyTNSNames_1.0" –Append 

     } else 
     { 
      write-host "$DestinationFolder$LOGFile non trouvé sur le poste" 
      "$(Get-Date) : $DestinationFolder$newFileName non trouvé localement." | Out-File "C:\Logs\CopyTNSNames_1.0" –Append 
     } 

     copy-item -path "$PathFolder\$LOGFile" -destination "$DestinationFolder$LOGFile" -Container -Force:$true -Recurse 
     "$(Get-Date) : Copy done $PathFolder\$LOGFile" | Out-File "C:\Logs\CopyTNSNames_1.0" –Append 
    } 
    Catch 
     { 
      "$(Get-Date) : copie non possible..." | Out-File "C:\Logs\" –Append 
      $Script_returnCode = code_retour $returnCode.ExitCode 
      write-host $returnCode.ExitCode 
      } 
    } 

} 



#Run main function 
CopyOra 


writetolog "" 
writetolog "End of script" 
writetolog "**************************" 
writetoreg ("Success",$Script_returnCode) 
exit $Script_returnCode 

Надеюсь, вы поможете мне решить эту проблему. С уважением.

ответ

0

Я должен восстановить вам сценарий ошибки перехвата правильно, всегда используйте функцию журнала и удаление ненужного кода

попробовать это:

Function writetolog ($nTxt){ 
$log_path = 'C:\logs\' 
New-Item -ItemType directory -Path $log_path -Force | Out-Null 

$log_Text="{0} {1}" -f (Get-Date), $nTxt 
$log_name = $log_path + 'CopyTNSNames_1.0.log' 
Add-content $log_name -value $log_Text 
} 

Function code_retour ($rc){ 
$rc_ok = 0 
$CodeDeRetour = "Return code : $rc" 

if($rc_ok -eq $rc) 
{ 
    writetolog $CodeDeRetour 
    writetoreg ("Success",$rc) 
    writetolog "" 
    writetolog "End of script" 
    writetolog "**************************" 
    exit $rc 
} 
Else 
{ 
    writetolog $CodeDeRetour 
    writetolog 'The script has failed' 
    writetolog '' 
    writetolog "**************************" 
    writetoreg ('Fail',$rc) 
    exit $rc 
} 

} 

Function writetoreg($status){ 

try 
{ 
$date = Get-Date 
$status_rc = 'RC = ' + $status[1] 
$regpath_DT = 'hkcu:software\MyCompany\Applications\CopyTNSNames_1.0\Result' 

if(!(Test-Path $regpath_DT)) {New-Item -Path $regpath_DT -force} 

If($status[0] -eq 'Succes') 
{ 
$result = 'Succes' 
Set-ItemProperty -Path $regpath_DT -Name $result -Value $date 
} 

If($status[0] -eq 'Failure') 
{ 
$result = 'Failure Timestamp ' + $date 
Set-ItemProperty -Path $regpath_DT -Name $result -Value $status_rc 
} 
} 
catch [System.Exception] 
{ 
    writetolog "Impossible d'écrire dans la base de registre, fonction writetoreg" 
    $ErrorMessage = $_.Exception.Message 
    $FailedItem = $_.Exception.ItemName 
    writetolog "Erreur détectée...Détail : $ErrorMessage, $FailedItem" 
} 


} 



Function CopyOra 
{ 
Try 
{ 

    $PathFolder = "\\partage\ORAFiles\Source" 
    $DestinationFolder = "c:\Apps\Oracle\11.2\network\admin\" 

    if (!(test-path $DestinationFolder)) 
    { 
     New-Item $DestinationFolder -ItemType Directory | Out-Null 
     writetolog "Created folder $DestinationFolder" 
    } 


    $LOGFilesFound = get-childitem $PathFolder -file | where Extension -eq ".ora" | Sort Time -descending 

    foreach ($LOGFile in $LOGFilesFound) 
    { 
     writetolog "processing files: $($_.Name)" 


     If (Test-Path "$DestinationFolder$LOGFile") 
     { 
      writetolog "fichier trouvé $DestinationFolder$LOGFile ... Copie de backup en cours." 

      $newFileName ="{0}-{1:dd-MM-yyyy HH-mm}{2}" -f $LOGFile.BaseName, (Get-Date), $LOGFile.Extension 

      copy-item "$DestinationFolder$LOGFile" "$DestinationFolder$newFileName" 

      writetolog "$DestinationFolder$newFileName créé." 

     } 
     else 
     { 
      write-host "$DestinationFolder$LOGFile non trouvé sur le poste" 
      writetolog "$DestinationFolder$newFileName non trouvé localement." 

      copy-item "$PathFolder\$LOGFile" "$DestinationFolder$LOGFile" 
      writetolog "Copie effectuée de $PathFolder\$LOGFile" 
     } 


    } 

} 

Catch 
{ 
     $ErrorMessage = $_.Exception.Message 
     $FailedItem = $_.Exception.ItemName 
     writetolog "Erreur détectée...Détail : $ErrorMessage, $FailedItem" 
     code_retour -1 
} 

} 

$ErrorActionPreference ='Stop' 

cls 

CopyOra 

code_retour 0 
+0

Привет и спасибо за Ваш ответ. – derspinne

+0

Кажется, что не может записываться в реестр. 2017-02-14 13:56:51 Обработка файлов: 2017-02-14 13:56:51 c: \ Apps \ Oracle \ 11.2 \ network \ admin \ non trouvé localement. 2017-02-14 13:56:51 Copie effectuée de \\ partage \ ORAFiles \ Source \ Tnsnames.ora 2017-02-14 13:56:51 Код возврата: 0 2017-02-14 13:56: 51 Невозможный d'écrire dans la base de registre, fonction writetoreg 2017-02-14 13:56:51 Erreur détectée ... Détail: Невозможный de lier l'argument au paramètre «Путь», автомобиль il a la valeur Null. , С уважением. – derspinne

+0

Теперь у вас есть объяснение вашей проблемы. Вы не можете писать в эту часть registre – Esperento57