서버 A의 일부 파일을 서버 B에 복사하려고하는 스크립트를 구현했습니다. 프로세스를 설명해 드리겠습니다.복사시 액세스가 거부되었습니다.
두 번 실행하려고하는 첫 번째 루프에서 첫 번째 실행에서 앱 풀을 중지하고 앱 풀을 시작하고 백업을 만드는 것보다 파일을 복사하려고하지만 내게 오류가 발생합니다. 액세스가 거부하지만 폴더에 대한 모든 권한을 수정할 수 있지만, 스크립트를 통해 나를 복사하고 서버 A에서 서버 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을
당신은 파일 복사하기 전에 서버 2 인증을 그물 사용하려고 했습니까? – Goldn123
그러나 이것은 다시 이중 홉 문제입니다. invoke 명령을 사용하여 한 컴퓨터에서 두 번째 컴퓨터에 연결할 때 세 번째 컴퓨터에 연결하는 데 문제가 있습니다. 예 : 스크립트의'Copy-Item'. 마지막 질문에서이 [기술 게시물] (https://blogs.technet.microsoft.com/ashleymcglone/2016/08/30/powershell-remoting-kerberos-double-hop-solved-securely/)을 연결했습니다. 이것은 이것에 대한 꽤 많은 방법이 있습니다. 쉬운 방법은 신선한 신임을 전달하여 연결하는 것입니다. 스크립트 블록'param'에'$ mycreds'를 추가하십시오. 또는'invoke-command' 전에 첫 번째 컴퓨터에서 복사하십시오. 또는 다른 연결된 메서드 중 하나를 – BenH
@ 벤치 네 맞아,하지만 $ mycreds 구현하려면 많이 시도하지만 여기에 행운을 가져다주지 그래서 내가 어떻게 도와 줄 수있는 매개 변수를 전달할 수있는 그것을 구현할 수 있습니다. 위 스크립트에서. –