2015-04-27 2 views
0

Я сделал следующий сценарий от Google для резервного копирования SSRS шифрования ключей:резервного копирования ключей шифрования SSRS Использование Powershell

cls 
$pwd = "[email protected]@123" 
$SSRSClass = Get-Wmiobject -namespace "root\microsoft\sqlserver\reportserver\rs_BPSSRS\v10\admin" -class "MSReportServer_ConfigurationSetting" 

$key = $SSRSClass.BackupEncryptionKey($pwd) 
$stream = [System.IO.File]::Create("c:\\SSRS.snk", $key.KeyFile.Length) 
$stream.Write($key.KeyFile, 0, $key.KeyFile.Length) 
$stream.Close() 

Но я получаю следующие ошибки:

Method invocation failed because [System.Object[]] doesn't contain a method named 'BackupEn 
cryptionKey'. 
At line:5 char:38 
+ $key = $SSRSClass.BackupEncryptionKey <<<< ($results) 
    + CategoryInfo   : InvalidOperation: (BackupEncryptionKey:String) [], RuntimeEx 
    ception 
    + FullyQualifiedErrorId : MethodNotFound 

Exception calling "Create" with "2" argument(s): "Positive number required. 
Parameter name: bufferSize" 
At line:6 char:35 
+ $stream = [System.IO.File]::Create <<<< ("c:\\SSRS.snk", $key.KeyFile.Length) 
    + CategoryInfo   : NotSpecified: (:) [], MethodInvocationException 
    + FullyQualifiedErrorId : DotNetMethodException 

You cannot call a method on a null-valued expression. 
At line:7 char:14 
+ $stream.Write <<<< ($key.KeyFile, 0, $key.KeyFile.Length) 
    + CategoryInfo   : InvalidOperation: (Write:String) [], RuntimeException 
    + FullyQualifiedErrorId : InvokeMethodOnNull 

You cannot call a method on a null-valued expression. 
At line:8 char:14 
+ $stream.Close <<<<() 
    + CategoryInfo   : InvalidOperation: (Close:String) [], RuntimeException 
    + FullyQualifiedErrorId : InvokeMethodOnNull 

I» m с помощью powershell v2. Я попытался найти это, но не повезло. В нашей среде около 50+ серверов SSRS, и резервное копирование вручную утомительно. Следовательно, мы придумали эту автоматизацию. Просьба предоставить ваши комментарии.

Благодаря

ответ

0

Этот кусок кода должен сделать трюк:

$ComputerName = "." 
$KeyFolder = "C:\Temp" 
$KeyPassword = "[email protected]@123" 
$TimeStamp = Get-Date -Format "-yyyyMMdd-HHmmss" 

Get-WmiObject -Namespace "Root\Microsoft\SqlServer\ReportServer" -Class "__Namespace" -ComputerName $ComputerName | 
    Select-Object -ExpandProperty Name | 
    % { 
     $NameSpaceRS = $_ 
     $InstanceName = $NameSpaceRS.SubString(3) 
     $KeyFileName = Join-Path -Path $KeyFolder -ChildPath ($InstanceName + $Timestamp + ".snk") 
     "Found Reporting Services in instance '$($InstanceName)' on $($ComputerName); will save key to '$($KeyFileName)' ..." 
     $SQLVersion = (Get-WmiObject -Namespace "Root\Microsoft\SqlServer\ReportServer\$($NameSpaceRS)" -Class "__Namespace" -ComputerName $ComputerName).Name 
     $SSRSClass = Get-WmiObject -Namespace "Root\Microsoft\SqlServer\ReportServer\$($NameSpaceRS)\$($SQLVersion)\Admin" -Query "SELECT * FROM MSReportServer_ConfigurationSetting WHERE InstanceName='$($InstanceName)'" -ComputerName $ComputerName 
     $Key = $SSRSClass.BackupEncryptionKey($KeyPassword) 
     If ($Key.HRESULT -ne 0) { 
      $Key.ExtendedErrors -join "`r`n" | Write-Error 
     } Else { 
      $Stream = [System.IO.File]::Create($KeyFileName, $Key.KeyFile.Length) 
      $Stream.Write($Key.KeyFile, 0, $Key.KeyFile.Length) 
      $Stream.Close() 
     } 
    } 

Ошибки, которые вы назвать, потому что ваш код пытается извлечь информацию из повторяющихся записей. Смысл, если вы попробуете приведенный выше код на сервере, где работает только один именованный экземпляр SSRS, я предполагаю, что он будет успешным. Просто попробуйте этот кусок и дайте свои комментарии. CHEERS.

+0

Спасибо за ваш вклад. Это сработало – user2068804

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