Updates auf Oracle Server mittels PowerShell
Updates auf Oracle Server (welche vorher schon deploy wurden) durchführen.
Einlesen mdt File mit der definiert wird welche Server upzudaten sind.
Meine PowerShell arbeitet sequentiell. Da das aber sehr lange geht bis zu 20 Oracle Server
upgedatet wurden, habe ich gedacht ich könnte die updates parallel starten.
Ich bin aber nicht so der PowerShell Freak. Kann mir da jemand helfen.
Gruss
G.Winklbauer
function upgrade
{
set-location D:\Abc\scripts
get-childitem $LogDir\upgrade.log -ErrorAction SilentlyContinue | remove-item
$stamp=get-date -UFormat %Y%m%d_%T
if ( ! ( test-path D:\Abc\Scripts\cfg\remoteupdate.lst ))
{
log info "Das File remoteupdate.lst im Verzeichnis D:\Abc\Scripts\cfg existiert nicht!"
}
else
{
$rel=get-content cfg\remoteupdate.lst | select-string -pattern 'Rel' |foreach { $_.ToString().split('=')[1] } | select-object -first 1
$sma=get-content cfg\remoteupdate.lst | select-string -pattern 'Sma' |foreach { $_.ToString().split('=')[1] } | select-object -first 1
$tbl=get-content cfg\remoteupdate.lst | select-string -pattern 'Tbl' |foreach { $_.ToString().split('=')[1] } | select-object -first 1
}
log info 'Starte den ilarUpgrade fuer die definierten Kunden, bitte warten...'
if ( ! ( test-path cfg\Mdt.txt ))
{
log info "Kundenfile Mdt.txt im Verzeichnis D:\Abc\Scripts\cfg wurde nicht gefunden!!"
}
else
{
get-content cfg\Mdt.txt | foreach {
try
{
$var1=$_
$var2='Kunde _'
$var3=$var2 + $var1
$var3 | out-file -encoding ASCII -Append $LogDir\upgrade.log
"==============" | out-file -encoding ASCII -Append $LogDir\upgrade.log
log info "Starte den ilarUpgrade für den Kunden $var3, bitte warten..."
$pass = get-content D:\Abc\scripts\pw\pw.txt |convertto-securestring
$credit = new-object -typename System.Management.Automation.PSCredential -argumentlist "svc_fnsw",$pass
$s = New-PSSession -computerName $var1 -credential $credit
$ou1=Invoke-Command -Session $s -Scriptblock {
param ($first,$second,$third)
write-output $first | out-file -encoding ASCII 'D:\Abc\Scripts\temp.txt'
$rel=(get-content D:\Abc\scripts\temp.txt)
write-output $second | out-file -encoding ASCII 'D:\Abc\Scripts\temp.txt'
$tbl=(get-content D:\Abc\scripts\temp.txt)
write-output $third | out-file -encoding ASCII 'D:\Abc\Scripts\temp.txt'
$sma=(get-content D:\Abc\scripts\temp.txt)
set-location D:\Abc\scripts\ilar_updates\$rel
get-childitem D:\Abc\scripts\temp.txt | remove-item
$stamp=get-date -UFormat %Y%m%d_%T
"$stamp Stoppe Filenet IS, bitte warten..." | out-file -encoding ASCII -Append sql1.txt
initfnsw -y stop 2>&1 | out-null
$state=initfnsw status 2>&1 | select-string -Quiet 'stopped'
if ($state -Match 'True')
{
$stamp=get-date -UFormat %Y%m%d_%T
"$stamp FileNet IS ist gestoppt" | out-file -encoding ASCII -Append sql1.txt
$dbr='ilar_' + $sma + '_DB_RELEASE ORDER BY DATUM;'
$sel='select * from ' + $dbr
$sql='@' + $tbl + '.sql ' + $sma
if ($sma -Match 'E1')
{
$var='@del_tabs_EDU.sql'
}
else
{
$var='@del_tabs_PROD.sql'
}
" " | out-file -encoding ASCII -Append D:\Abc\Scripts\ilar_updates\$rel\sql1.txt
$stamp=get-date -UFormat %Y%m%d_%T
"$stamp Fuehre ilarUpgrade im Schema $sma durch..." | out-file -encoding ASCII -Append D:\Abc\Scripts\ilar_updates\$rel\sql1.txt
set lines 255;
set pages 999;
set hea off;
quit
"@ | sqlplus -S -L ilar/ilar
$out1 | out-file -encoding ASCII -Append D:\Abc\Scripts\ilar_updates\$rel\sql1.txt
$stamp=get-date -UFormat %Y%m%d_%T
"$stamp Kontrolle der Tabelle $dbr" | out-file -encoding ASCII -Append D:\Abc\Scripts\ilar_updates\$rel\sql1.txt
set lines 255;
set pages 999;
set hea off;
quit
"@ | sqlplus -S -L ilar/ilar
$out1 | out-file -encoding ASCII -Append D:\Abc\Scripts\ilar_updates\$rel\sql1.txt
"Oracle Fehler aus dem Logfile vom ilarUpgrade" | out-file -encoding ASCII -Append D:\Abc\Scripts\ilar_updates\$rel\sql1.txt
"---------------------------------------------" | out-file -encoding ASCII -Append D:\Abc\Scripts\ilar_updates\$rel\sql1.txt
" " | out-file -encoding ASCII -Append D:\Abc\Scripts\ilar_updates\$rel\sql1.txt
$ask=$tbl + '_' + $Sma + '.log'
get-content $ask | select-string -pattern 'ORA-' | out-file -encoding ASCII -Append D:\Abc\Scripts\ilar_updates\$rel\sql1.txt
"ERROR aus dem Logfile vom ilarUpgrade" | out-file -encoding ASCII -Append D:\Abc\Scripts\ilar_updates\$rel\sql1.txt
"-------------------------------------" | out-file -encoding ASCII -Append D:\Abc\Scripts\ilar_updates\$rel\sql1.txt
" " | out-file -encoding ASCII -Append D:\Abc\Scripts\ilar_updates\$rel\sql1.txt
get-content $ask | select-string -pattern 'ERROR' | out-file -encoding ASCII -Append D:\Abc\Scripts\ilar_updates\$rel\sql1.txt
$stamp=get-date -UFormat %Y%m%d_%T
"$stamp FileNet IS wird gestartet, bitte warten..." | out-file -encoding ASCII -Append D:\Abc\Scripts\ilar_updates\$rel\sql1.txt
set-location D:\Abc\scripts
initfnsw start
$state = initfnsw status 2>&1 | select-string -Quiet 'started'
if ($state -Match 'True')
{
$stamp=get-date -UFormat %Y%m%d_%T
"$stamp FileNet IS wurde gestartet!" | out-file -encoding ASCII -Append D:\Abc\Scripts\ilar_updates\$rel\sql1.txt
" " | out-file -encoding ASCII -Append D:\Abc\Scripts\ilar_updates\$rel\sql1.txt
}
else
{
$stamp=get-date -UFormat %Y%m%d_%T
"$stamp FileNet IS konnte nicht gestartet werden, bitte pruefen!!" | out-file -encoding ASCII -Append D:\Abc\Scripts\ilar_updates\$rel\sql1.txt
" " | out-file -encoding ASCII -Append D:\Abc\Scripts\ilar_updates\$rel\sql1.txt
}
}
else
{
$stamp=get-date -UFormat %Y%m%d_%T
"$stamp FileNet IS konnte nicht gestoppt werden, der Upgrade wurde nicht durchgefuert!!" | out-file -encoding ASCII -Append sql1.txt
" " | out-file -encoding ASCII -Append D:\Abc\Scripts\ilar_updates\$rel\sql1.txt
}
get-content D:\Abc\scripts\ilar_updates\$rel\sql1.txt
get-childitem D:\Abc\scripts\ilar_updates\$rel\sql1.txt | remove-item
} -ArgumentList $rel,$tbl,$sma
$ou1 | out-file -encoding ASCII -Append $LogDir\upgrade.log
Remove-PSSession $s
log info "Der ilarUpgrade für den Kunden $var3 wurde beendet!"
}
catch
{
log warn "Der ilarUpgrade für den Kunden $var3 konnte nicht durchgeführt werden!!!"
log WARN "Msg:`t $($_.Exception.Message)"
log WARN "Cat:`t $($_.CategoryInfo) $($_.InvocationInfo.PositionMessage)"
log warn "Zur Fehleranalyse ggf. auf dem Kundensystem $var3 das Logfile D:\Abc\scripts\ilar_updates\$rel\sql1.txt kontrollieren!" }
}
}
$stamp=get-date -UFormat %Y%m%d_%T
log info "Der ilarUpgrade für die definierten Kunden wurde beendet!"
log info "Bitte die Datei upgrade.log für Detailinformationen zum Upgrade kontrollieren!"
}
Einlesen mdt File mit der definiert wird welche Server upzudaten sind.
Meine PowerShell arbeitet sequentiell. Da das aber sehr lange geht bis zu 20 Oracle Server
upgedatet wurden, habe ich gedacht ich könnte die updates parallel starten.
Ich bin aber nicht so der PowerShell Freak. Kann mir da jemand helfen.
Gruss
G.Winklbauer
function upgrade
{
set-location D:\Abc\scripts
get-childitem $LogDir\upgrade.log -ErrorAction SilentlyContinue | remove-item
$stamp=get-date -UFormat %Y%m%d_%T
if ( ! ( test-path D:\Abc\Scripts\cfg\remoteupdate.lst ))
{
log info "Das File remoteupdate.lst im Verzeichnis D:\Abc\Scripts\cfg existiert nicht!"
}
else
{
$rel=get-content cfg\remoteupdate.lst | select-string -pattern 'Rel' |foreach { $_.ToString().split('=')[1] } | select-object -first 1
$sma=get-content cfg\remoteupdate.lst | select-string -pattern 'Sma' |foreach { $_.ToString().split('=')[1] } | select-object -first 1
$tbl=get-content cfg\remoteupdate.lst | select-string -pattern 'Tbl' |foreach { $_.ToString().split('=')[1] } | select-object -first 1
}
log info 'Starte den ilarUpgrade fuer die definierten Kunden, bitte warten...'
if ( ! ( test-path cfg\Mdt.txt ))
{
log info "Kundenfile Mdt.txt im Verzeichnis D:\Abc\Scripts\cfg wurde nicht gefunden!!"
}
else
{
get-content cfg\Mdt.txt | foreach {
try
{
$var1=$_
$var2='Kunde _'
$var3=$var2 + $var1
$var3 | out-file -encoding ASCII -Append $LogDir\upgrade.log
"==============" | out-file -encoding ASCII -Append $LogDir\upgrade.log
log info "Starte den ilarUpgrade für den Kunden $var3, bitte warten..."
$pass = get-content D:\Abc\scripts\pw\pw.txt |convertto-securestring
$credit = new-object -typename System.Management.Automation.PSCredential -argumentlist "svc_fnsw",$pass
$s = New-PSSession -computerName $var1 -credential $credit
$ou1=Invoke-Command -Session $s -Scriptblock {
param ($first,$second,$third)
write-output $first | out-file -encoding ASCII 'D:\Abc\Scripts\temp.txt'
$rel=(get-content D:\Abc\scripts\temp.txt)
write-output $second | out-file -encoding ASCII 'D:\Abc\Scripts\temp.txt'
$tbl=(get-content D:\Abc\scripts\temp.txt)
write-output $third | out-file -encoding ASCII 'D:\Abc\Scripts\temp.txt'
$sma=(get-content D:\Abc\scripts\temp.txt)
set-location D:\Abc\scripts\ilar_updates\$rel
get-childitem D:\Abc\scripts\temp.txt | remove-item
$stamp=get-date -UFormat %Y%m%d_%T
"$stamp Stoppe Filenet IS, bitte warten..." | out-file -encoding ASCII -Append sql1.txt
initfnsw -y stop 2>&1 | out-null
$state=initfnsw status 2>&1 | select-string -Quiet 'stopped'
if ($state -Match 'True')
{
$stamp=get-date -UFormat %Y%m%d_%T
"$stamp FileNet IS ist gestoppt" | out-file -encoding ASCII -Append sql1.txt
$dbr='ilar_' + $sma + '_DB_RELEASE ORDER BY DATUM;'
$sel='select * from ' + $dbr
$sql='@' + $tbl + '.sql ' + $sma
if ($sma -Match 'E1')
{
$var='@del_tabs_EDU.sql'
}
else
{
$var='@del_tabs_PROD.sql'
}
" " | out-file -encoding ASCII -Append D:\Abc\Scripts\ilar_updates\$rel\sql1.txt
$stamp=get-date -UFormat %Y%m%d_%T
"$stamp Fuehre ilarUpgrade im Schema $sma durch..." | out-file -encoding ASCII -Append D:\Abc\Scripts\ilar_updates\$rel\sql1.txt
- Update der Tabelle ausführen
set lines 255;
set pages 999;
set hea off;
quit
"@ | sqlplus -S -L ilar/ilar
$out1 | out-file -encoding ASCII -Append D:\Abc\Scripts\ilar_updates\$rel\sql1.txt
$stamp=get-date -UFormat %Y%m%d_%T
"$stamp Kontrolle der Tabelle $dbr" | out-file -encoding ASCII -Append D:\Abc\Scripts\ilar_updates\$rel\sql1.txt
- Kontrolle der DB Releases ausführen
set lines 255;
set pages 999;
set hea off;
quit
"@ | sqlplus -S -L ilar/ilar
$out1 | out-file -encoding ASCII -Append D:\Abc\Scripts\ilar_updates\$rel\sql1.txt
"Oracle Fehler aus dem Logfile vom ilarUpgrade" | out-file -encoding ASCII -Append D:\Abc\Scripts\ilar_updates\$rel\sql1.txt
"---------------------------------------------" | out-file -encoding ASCII -Append D:\Abc\Scripts\ilar_updates\$rel\sql1.txt
" " | out-file -encoding ASCII -Append D:\Abc\Scripts\ilar_updates\$rel\sql1.txt
$ask=$tbl + '_' + $Sma + '.log'
get-content $ask | select-string -pattern 'ORA-' | out-file -encoding ASCII -Append D:\Abc\Scripts\ilar_updates\$rel\sql1.txt
"ERROR aus dem Logfile vom ilarUpgrade" | out-file -encoding ASCII -Append D:\Abc\Scripts\ilar_updates\$rel\sql1.txt
"-------------------------------------" | out-file -encoding ASCII -Append D:\Abc\Scripts\ilar_updates\$rel\sql1.txt
" " | out-file -encoding ASCII -Append D:\Abc\Scripts\ilar_updates\$rel\sql1.txt
get-content $ask | select-string -pattern 'ERROR' | out-file -encoding ASCII -Append D:\Abc\Scripts\ilar_updates\$rel\sql1.txt
$stamp=get-date -UFormat %Y%m%d_%T
"$stamp FileNet IS wird gestartet, bitte warten..." | out-file -encoding ASCII -Append D:\Abc\Scripts\ilar_updates\$rel\sql1.txt
set-location D:\Abc\scripts
initfnsw start
$state = initfnsw status 2>&1 | select-string -Quiet 'started'
if ($state -Match 'True')
{
$stamp=get-date -UFormat %Y%m%d_%T
"$stamp FileNet IS wurde gestartet!" | out-file -encoding ASCII -Append D:\Abc\Scripts\ilar_updates\$rel\sql1.txt
" " | out-file -encoding ASCII -Append D:\Abc\Scripts\ilar_updates\$rel\sql1.txt
}
else
{
$stamp=get-date -UFormat %Y%m%d_%T
"$stamp FileNet IS konnte nicht gestartet werden, bitte pruefen!!" | out-file -encoding ASCII -Append D:\Abc\Scripts\ilar_updates\$rel\sql1.txt
" " | out-file -encoding ASCII -Append D:\Abc\Scripts\ilar_updates\$rel\sql1.txt
}
}
else
{
$stamp=get-date -UFormat %Y%m%d_%T
"$stamp FileNet IS konnte nicht gestoppt werden, der Upgrade wurde nicht durchgefuert!!" | out-file -encoding ASCII -Append sql1.txt
" " | out-file -encoding ASCII -Append D:\Abc\Scripts\ilar_updates\$rel\sql1.txt
}
get-content D:\Abc\scripts\ilar_updates\$rel\sql1.txt
get-childitem D:\Abc\scripts\ilar_updates\$rel\sql1.txt | remove-item
} -ArgumentList $rel,$tbl,$sma
$ou1 | out-file -encoding ASCII -Append $LogDir\upgrade.log
Remove-PSSession $s
log info "Der ilarUpgrade für den Kunden $var3 wurde beendet!"
}
catch
{
log warn "Der ilarUpgrade für den Kunden $var3 konnte nicht durchgeführt werden!!!"
log WARN "Msg:`t $($_.Exception.Message)"
log WARN "Cat:`t $($_.CategoryInfo) $($_.InvocationInfo.PositionMessage)"
log warn "Zur Fehleranalyse ggf. auf dem Kundensystem $var3 das Logfile D:\Abc\scripts\ilar_updates\$rel\sql1.txt kontrollieren!" }
}
}
$stamp=get-date -UFormat %Y%m%d_%T
log info "Der ilarUpgrade für die definierten Kunden wurde beendet!"
log info "Bitte die Datei upgrade.log für Detailinformationen zum Upgrade kontrollieren!"
}
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 497765
Url: https://administrator.de/forum/updates-auf-oracle-server-mittels-powershell-497765.html
Ausgedruckt am: 05.05.2025 um 17:05 Uhr
7 Kommentare
Neuester Kommentar

Auch nicht Powershell Freaks sollten in der Lage sein wenn sie das gelesen haben:
https://blogs.technet.microsoft.com/uktechnet/2016/06/20/parallel-proces ...
https://blogs.technet.microsoft.com/uktechnet/2016/06/20/parallel-proces ...

Viel Spaß hier noch beim abreagieren. Der Freitag wirft mal wieder seine Schatten voraus...

Hehe, der Nickname lässt auch vermuten, dass er nicht lange hier bleibt