PowerShell-Skript zum Ändern der Sprache von SSRS-Berichten

/*
Erstellt von Ian Grieve von azurecurve|Ramblings of an IT Professional (http://www.azurecurve.co.uk) Dieser Code ist lizenziert unter Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0 Int) . */

$ServerName = Read-Host -Prompt ‘Bitte geben Sie einen Servernamen ein’
$fullFolderPath = Read-Host -Prompt ‘Bitte geben Sie den Ordnerpfad ein, zB H:SSRS Update’

#beachten Sie, dass dies auf PowerShell v2 und SSRS 2008 R2 getestet wurde
[void][System.Reflection.Assembly]::LoadWithPartialName(“System.Xml.XmlDocument”);
[void][System.Reflection.Assembly]::LoadWithPartialName(“System.IO”);

$ReportServerUri = “http://$($ServerName)/ReportServer/ReportService2005.asmx”;
$Proxy = New-WebServiceProxy -Uri $ReportServerUri -Namespace SSRS.ReportingService2005 -UseDefaultCredential ;

#Schau dir alle Mitglieder von $Proxy an
#$Proxy | Get-Mitglied
#http://msdn.microsoft.com/en-us/library/aa225878(v=SQL.80).aspx

#zweiter Parameter bedeutet rekursiv
$items = $Proxy.ListChildren(“https://community.dynamics.com/”, $true) | `
wählen Sie Typ, Pfad, ID, Name | `
Where-Object {$_.type -eq “Bericht”};

#Erstellen Sie einen neuen Ordner, in dem wir die Dateien speichern
#PowerShell-Datetime-Formatcodes http://technet.microsoft.com/en-us/library/ee692801.aspx

#erstelle einen Ordner mit Zeitstempel, Format ähnlich wie 2011-Mar-28-0850PM
$folderName = Get-Date -format “yyyy-MMM-dd-hhmmtt”;
$fullFolderName = $fullFolderPath + $folderName;
[System.IO.Directory]::CreateDirectory($fullFolderName) | out-null

foreach($item in $items)
{
#müssen herausfinden, ob es einen Ordnernamen hat
$subfolderName = Split-Pfad $item.Path;
$reportName = split-path $item.Path -Blatt;
$fullSubfolderName = $fullFolderName + $subfolderName;
if(-not(Test-Pfad $fullSubfolderName))
{
#beachten Sie, dass dadurch die vollständige Ordnerhierarchie erstellt wird
[System.IO.Directory]::CreateDirectory($fullSubfolderName) | out-null
}

$rdlFile = New-Object System.Xml.XmlDocument;
[byte[]]$reportDefinition = $null;
$reportDefinition = $Proxy.GetReportDefinition($item.Path);

#beachten Sie, dass wir hier die eigentliche Definition erzwingen
#gespeichert als Byte-Array
#wenn Sie das @() aus dem MemoryStream-Konstruktor entfernen, werden Sie
#Erhalte einen Fehler
[System.IO.MemoryStream] $memStream = New-Object System.IO.MemoryStream(@(,$reportDefinition));
$rdlFile.Load($memStream);

$fullReportFileName = $fullSubfolderName + “” + $item.Name + “.rdl”;
#Write-Host $fullReportFileName;
$rdlFile.Save( $fullReportFileName );

}

Funktion ReplaceText($fileInfo)
{
if( $_.GetType().Name -nicht ‘FileInfo’)
{
# dh weist DirectoryInfo und andere Typen zurück
Rückkehr
}
$old = ‘en-US’
$neu = ‘de-DE
(Get-Content $fileInfo.FullName) | % {$_ – $alt, $neu ersetzen} | Set-Content -path $fileInfo.FullName
“Verarbeitet: ” + $fileInfo.FullName
}

function UploadReports ($reportServerName = $(throw „reportServerName is required.“)
$fromDirectory = $(throw “fromDirectory is required.”), $serverPath = $(throw “serverPath is required.”))
{
Write-Output “Connecting to $reportServerName”
$reportServerUri = “http://{0}/ReportServer/ReportService2005.asmx” -f $reportServerName
$proxy = New-WebServiceProxy -Uri $reportServerUri -Namespace SSRS.ReportingService2005 -UseDefaultCredential

Write-Output “Inspecting $fromDirectory”
# Zwingen Sie die Rückgabe zu einem Array mit dem @-Operator, falls nur eine Datei vorhanden ist
$files = @(get-childitem $fromDirectory *.rdl |where-object {!($_.psiscontainer)})

$uploadedCount = 0

foreach ($fileInfo in $files)
{
$datei = [System.IO.Path]::GetFileNameWithoutExtension($fileInfo.FullName)
$percentDone = (($uploadedCount/$files.Count) * 100)
Schreibfortschritt -Aktivität “Uploading to $reportServerName$serverPath” -status $file -percentComplete $percentDone
Write-Output “%$percentDone : Uploading $file to $reportServerName$serverPath”
$bytes = [System.IO.File]::ReadAllBytes($fileInfo.FullName)
$warnings = $proxy.CreateReport($file, $serverPath, $true, $bytes, $null)

if ($Warnungen)
{
foreach ($warn in $warnungen)
{
Write-Warnung $warn.Message
}
}

$uploadedCount += 1
}
}`

cd $fullFolderName

$files = Get-ChildItem . -Rückfall
$Dateien | % {Text ersetzen( $_ ) }

$UploadFiles = Get-ChildItem . -Rekurs -Verzeichnis

foreach($uploadOrdner in $uploadFiles){

$uploadFolderPath = $uploadFolder.FullName.Replace($fullFolderName, “”)
UploadReports $ServerName “$($fullFolderName)$($uploadFolderPath)” “$($uploadFolderPath.Replace(“”,”https://community.dynamics.com/”))”

}

.

Author: admin

Leave a Reply

Your email address will not be published. Required fields are marked *