7

Я реализовал сценарий, где я пытаюсь скопировать некоторые файлы на сервере A на сервер B. Позвольте мне объяснить вам этот процесс.Доступ запрещен при копировании

Я начал один цикл, который будет запускаться дважды и в первом исполнении. Я останавливаю пулы приложений и запускаю пулы приложений, а не создаю резервную копию, а затем пытаюсь скопировать файлы, но это дает мне ошибку, доступ запрещен, но я редактировать все разрешения на папку, но через скрипт это не позволяет мне скопировать и заменить файлы на сервере 2 с сервером А.

# Embedding the password in the script. 
"Setting Variables" 
$MyDomain = "ranbi" ; 
$MyClearTextUsername = "shian" ; 
$MyClearTextPassword = "[email protected]" ; 
$MyUsernameDomain = $MyDomain + '\' + $MyClearTextUsername; 
$SecurePassword = ConvertTo-SecureString -String $MyClearTextPassword -AsPlainText -Force ; 
$MyCreds = New-Object System.Management.Automation.PSCredential $MyUsernameDomain,$SecurePassword ; 

#System Variable for backup Procedure 
$date = Get-Date -Format d-MMMM-yyyy-h-m-s                #Variable is used to get the date and time 

for ($i=1; $i -le 2; $i++) { 
    $servername = "server" + $i 
    $backupsrc = "\\$servername\C$\Program Files (x86)\service\healthService\v1_0"      #backup directory for source Code 
    $backupdes = "\\$servername\C$\Temp\ICS-$date"              #destination for backup appending with date time 
    $sourcesrc = "\\server1\C$\Deployment\Health\bin"             #source directory for source Code 
    $destinationsrc = "\\server1\C$\Program Files (x86)\service\healthService\v1_0\bin"    #destination directory for source Code on Server1 
    $forcetwo ="\\server2\C$\bin"                  #destination directory for source Code on Server2 
    $sourceweb = "\\Server1\C$\Deployment\Health\web.config"           #source directory for webconfig 
    $destinationweb = "\\server1\C$\Program Files (x86)\service\healthservice\v1_0\web.config"   #destination directory for webconfig on Ser1 
    $destweb = "\\Server2\C$\Program Files (x86)\service\web.config"         #destination directory for webconfig on Ser2 
    $pathback = Test-Path $backupdes                 #verifying the backup destination path 
    $appPoolName = "HealthService"                  #Initialized App Pool Name 
    $forcethree = "\\Server2\C$\bin"                 #webconfigfile source for Server2 
    $forcefour = "\\Server2\C$\Program Files (x86)\service\healthService\v1_0\bin"      #webconfigfile destination for Server2 

    # Placing the script under a ScriptBlock 
    ##### 
    $MyScriptblock = { 
     Param($appPoolName,$pathback,$date,$backupsrc,$backupdes,$sourcesrc,$destinationsrc,$sourceweb,$destinationweb,$servername,$forcetwo,$destweb,$forcethree,$forcefour) 

     function fnStartApplicationPool([string]$appPoolName) { 
      Import-Module WebAdministration 
      if ((Get-WebAppPoolState $appPoolName).Value -ne 'Started') { 
       Start-WebAppPool -Name $appPoolName 
      } 
     } 

     function fnStopApplicationPool([string]$appPoolName) { 
      Import-Module WebAdministration 
      if ((Get-WebAppPoolState $appPoolName).Value -ne 'Stopped') { 
       Stop-WebAppPool -Name $appPoolName 
      } 
     } 
     if ($pathback -eq $false) { 
      #Copying Data from Source to Destination 
      Copy-Item -Recurse $backupsrc -Destination $backupdes 
      Write-Host "Backup Successful on server $servername" 

      #Validating the apppool value 
      Import-Module WebAdministration 
      if ((Get-WebAppPoolState $appPoolName).Value -ne 'Stopped') { 
       #Stop apppool 
       Stop-WebAppPool -Name $appPoolName 
       Write-Host "AppPool Stopped Successfully for $servername" 
      } 
      if ($servername -eq 'server1') { 
       #Copying Data from Source to Destination 
       Copy-Item $sourcesrc -Destination $destinationsrc -Recurse -Force    
       Copy-Item $sourcesrc -Destination $forcetwo -Recurse -Force 
       Copy-Item $sourceweb -Destination $destinationweb -Recurse -Force 
       Copy-Item $sourceweb -Destination $destweb -Recurse -Force 
      } 
      if ($servername -eq 'server2') { 
       #Copying Data from Source to Destination 
       Copy-Item $forcethree -Destination $forcefour -Recurse -Force 
      } 
      #Start apppool 
      Start-WebAppPool -Name $appPoolName 
      Write-Host "AppPool Started Successfully on $servername" 
      cd c:\ 
     } 
    } 

    $result = Invoke-Command -ComputerName $servername -Credential $MyCreds -ScriptBlock $MyScriptblock -ArgumentList $appPoolName,$pathback,$date,$backupsrc,$backupdes,$sourcesrc,$destinationsrc,$sourceweb,$destinationweb,$servername,$forcetwo,$destweb,$forcethree,$forcefour ; 
    $result ; 
} 

cd c:\ 

Я получаю ошибку ниже:

Access to the path 'bin' is denied. 
    + CategoryInfo   : PermissionDenied: (\\Server2\C$\bin:String) [Copy-Item], UnauthorizedAccessException 
    + FullyQualifiedErrorId : CreateDirectoryUnauthorizedAccessError,Microsoft.PowerShell.Commands.CopyItemCommand
+0

Вы попытались чистое использование для аутентификации server2 до копирования файлов? – Goldn123

+0

Еще раз это проблема с двойным хопом. Когда вы используете команду invoke для подключения с одного компьютера на секунду, у вас будут проблемы с подключением к третьему. например 'Copy-Item' в вашем скрипте. В последнем вопросе я связал это [сообщение о технике] (https://blogs.technet.microsoft.com/ashleymcglone/2016/08/30/powershell-remoting-kerberos-double-hop-solved-securely/). Об этом довольно много. Легкий способ - передать свежие кредиты для использования. Добавьте '$ mycreds' в свой скриптовый блок' param'. Или сделайте копию с первого компьютера перед 'invoke-command'. Или любой из других связанных методов – BenH

+0

@BenH да, вы правы, но я очень старался реализовать $ mycreds, но не получал удачи здесь, так что, пожалуйста, помогите мне, как я могу реализовать его с передачей параметров ему, как вы можете видеть в приведенном выше сценарии. –

ответ

-2

Вы изучили делегированные удаленные сеансы или JEA (Просто достаточно администратор)? Оба они станут отличным решением проблемы с двойным ходом Kerberos.

Посмотрите на this series of articles, чтобы начать работу с делегаций.

0

Просто используйте командлеты WebDeploy, если вы пытаетесь синхронизировать некоторые сайты в вашей ферме IIS.

Power Shell IIS cmdlets

Sync-WDServer, Sync-WDSite т.д.

 Смежные вопросы

  • Нет связанных вопросов^_^