我想在当前用户的本地或远程计算机上执行以下代码。
$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
这个,它抛出execption(我也试过“-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
如果我想添加computerName或session,有谁知道我该怎么办? (注意:[Environment] :: UserName返回相同的用户)
答案 0 :(得分:2)
你遇到了双跃点问题。您的凭据可以转移到下一台机器(第一跳),但不能再转移(第二跳)。这意味着您无法使用正在执行Invoke-Command的计算机的凭据,远程计算机(localhost)连接到文件共享(\ Host5FileSrv \ Backup)。即使您使用localhost作为计算机名,它仍然是远程处理。一个解决方案可能是CredSSP。有关详细信息,请参阅here和here。
答案 1 :(得分:1)
这看起来像是“第二跳”远程问题,您需要在涉及的计算机上配置WinRM才能使用CredSSP
http://msdn.microsoft.com/en-us/library/windows/desktop/ee309365(v=vs.85).aspx