1

我想在当前用户所在的本地或远程机器上执行以下代码。

$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 是

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

我注意到

这个,它运作良好(没有 -comupterName 和 -session)

Invoke-Command -ScriptBlock $BackUpSqlAgentAndRemoveOldbackup -argumentList $argList

这个,它抛出执行(我也试过“-session”,得到相同的结果)

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

如果我想添加计算机名或会话,有谁知道我该怎么做?(注:[Environment]::UserName 返回相同的用户)

4

2 回答 2

2

您遇到了双跳问题。您的凭据可以转移到下一台机器(第一跳),但不能再转移(第二跳)。这意味着您不能使用正在执行 Invoke-Command 的计算机、远程计算机 (localhost) 的凭据连接到文件共享 (\Host5FileSrv\Backup)。即使您使用 localhost 作为计算机名,它仍然是远程处理的。一个解决方案可能是 CredSSP。有关更多信息,请参见此处此处

双跳

于 2013-03-30T12:21:44.023 回答
1

这看起来像是一个“第二跳”远程问题,您需要在所涉及的计算机上配置 WinRM 才能使用 CredSSP

http://msdn.microsoft.com/en-us/library/windows/desktop/ee309365(v=vs.85).aspx

于 2013-03-30T12:15:17.373 回答