2013-03-30 3 views
1

현재 사용자가 사용하는 로컬 또는 원격 시스템에서 아래 코드를 실행하려고합니다.-computerName을 사용하면 powershell invoke-command가 작동하지 않습니다.

$BackUpSqlAgentAndRemoveOldbackup = { 
    param([string]$AppServer,[string]$SqlInstance,[string]$BackupShare,[string]$alias) 

    [Environment]::UserName #I got same user name in all cases. 

    [System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.Smo') | Out-Null 

    $server = New-Object ('Microsoft.SqlServer.Management.Smo.Server') $SqlInstance 

    $backupName = 'SqlAgentJob_' + $SqlInstance + '_' + (Get-Date –format ‘yyyyMMdd_HHmm’) + '_' + $alias + '.sql' 
    $backupPath = join-path $BackupShare $backupName 

    $oldBackups = Get-ChildItem $backupShare | where { ($_.name -like 'SqlAgentJob_*.sql') } 
    $server.JobServer.Jobs.Script() | Out-File -filepath $backupPath 
    foreach ($item in $oldBackups) { remove-item $item.fullName } 
} 

@argList는 (더 -comupterName 및 -session)

Invoke-Command -ScriptBlock $BackUpSqlAgentAndRemoveOldbackup -argumentList $argList 

이 하나, 그것을 내가

이 하나, 그것은 잘 작동 것을 알 수

@('hafcapp-1', 'hafcsql-1', '\\Host5FileSrv\Backup\test','auto') 

없다 실행을 포기 (나는 또한 "- 세션"을 시도, 동일한 결과를 얻을)

Invoke-Command -computerName localhost -ScriptBlock $BackUpSqlAgentAndRemoveOldbackup -argumentList $argList 

예외는 다음과 같습니다. 폴더에 액세스 할 수없는 것으로 보입니다.

Cannot find path '\\Host5FileSrv\Backup\test' because it does not exist. 
    + CategoryInfo   : ObjectNotFound: (\\Host5FileSrv\Backup\test:String) [Get-ChildItem], ItemNotFoundException 
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand 

You cannot call a method on a null-valued expression. 
    + CategoryInfo   : InvalidOperation: (Script:String) [], RuntimeException 
    + FullyQualifiedErrorId : InvokeMethodOnNull 

Cannot bind argument to parameter 'Path' because it is null. 
    + CategoryInfo   : InvalidData: (:) [Remove-Item], ParameterBindingValidationException 
    + FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.RemoveItemCommand 

컴퓨터 이름이나 세션을 추가하려면 어떻게해야합니까? (참고 : [환경] : 사용자 이름이 동일한 사용자를 반환) 이것은 "두 번째 홉"원격 문제처럼 보인다

답변

2

이중 홉 문제가 발생했습니다. 자격 증명은 다음 컴퓨터 (첫 번째 홉)로 전송 될 수 있지만 더 이상 (두 번째 홉)은 전송되지 않습니다. 즉, Invoke-Command를 실행중인 컴퓨터의 자격 증명, 원격 컴퓨터 (localhost)가 파일 공유 (\ Host5FileSrv \ Backup)에 연결하는 데 사용할 수 없습니다. localhost를 computername으로 사용하더라도 여전히 원격입니다. 솔루션은 CredSSP 일 수 있습니다. 자세한 내용은 herehere을 참조하십시오.

double hop